`
chenghao1994
  • 浏览: 3144 次
社区版块
存档分类
最新评论

已知一个二叉树的前序、中序遍历求其后续遍历 Java代码实现

阅读更多

如题,好像大学的课后作业。写一个练练手。网上不少,大多都是C或C++的。

 

一个二叉树前序遍历:GDAFEMHZ

                  中序遍历:ADEFGHMZ

求其后续遍历。

 

求解过程

0.这三种遍历不知道是什么意思的请自行搜索。

1.通过前序遍历我们可知此树根节点为G(即前序遍历第一个字符)

2.观测中序遍历可知此树左子树所有节点为:ADEF  右子树所有节点为:HMZ(以根节点划分)

3.得到左子树的前序遍历(DAFE)中序遍历(ADEF) 顺序未变。

4.得到右字数的前序遍历(MHZ)中序遍历(HMZ) 顺序未变。

5.递归此过程,展开所有子树。

 

代码如下:

    定义二叉树的类

public class Tree {
	
	 String root = "";//根节点
	 Tree left;       //左子树
	 Tree right;      //右子树
	 
	 String pre = "";//前序遍历字符串
	 String in = "";//中序遍历字符串
	 String back = "";//后序遍历字符串
	
	Tree(String s){
		this.root = s;
	}
	
	Tree(){}
	
}

 

    实现代码:

   

public class testTree {
	
	
	public static String post = "";

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String pre = "GDAFEMHZ";
		String in = "ADEFGHMZ";
		Tree t = new Tree();
		t.root = in;
		t.pre = pre;
		
		build(t);
		System.out.println(post);
		
		
	}
	
	
	/**
	 * 采取后序遍历递归展开所有节点
	 * @param tree
	 */
	public static void build(Tree tree){
		

		if(tree == null){
			return;
		}
		open(tree);
		if(tree.left != null){
			open(tree.left);
			build(tree.left);
		}
		if(tree.right != null){
			open(tree.right);
			build(tree.right);
		}
		post = post + tree.root;
	}
	
	
	/**
	 * 将节点不是单字符的节点展开
	 * @param tree
	 */
	
	public static void open(Tree tree){
		if(tree.root.length()>1){
			String s2 = tree.root;
			String s1 = tree.pre;
			 
			tree.root =s1.substring(0, 1);
			String [] node = s2.split(tree.root);
			if(node.length>=2){
				tree.left = new Tree(node[0]);
				tree.left.pre = s1.substring(1, node[0].length()+1);
				tree.right = new Tree(node[1]);
				tree.right.pre = s1.substring(s1.length()-node[1].length(), s1.length());
			}

		}
	}

}

 

 

分享到:
评论

相关推荐

    二叉树已知后序和中序遍历求前序遍历,C++代码

    二叉树已知后序和中序遍历求前序遍历,C++编写已通过编译

    已知二叉树的前序和中序遍历,打印后序遍历

    这里我们将重点讨论如何在已知二叉树的前序和中序遍历的情况下,通过非递归算法实现后序遍历。 **前序遍历**:根节点 -> 左子树 -> 右子树 **中序遍历**:左子树 -> 根节点 -> 右子树 **后序遍历**:左子树 -> 右子...

    已知中序遍历和后序遍历求前序遍历

    已知中序遍历和后序遍历,求前序遍历。有比较详尽的中文注释。

    根据先序与中序遍历结果建立二叉树

    根据题目描述,我们需要编写一个程序,该程序能够接收两行输入,分别是先序遍历序列和中序遍历序列,并根据这两组序列重建二叉树。 1. **定义节点结构**:首先,我们需要定义一个结构体`BTNode`来表示二叉树中的每...

    递归建立二叉树与前序中序后续遍历

    二叉树的节点通常包含一个值和两个指针,分别指向其左子树和右子树。 递归建立二叉树通常基于已知的节点序列,如前序遍历、中序遍历或后序遍历的序列。这些遍历方式提供了构建树的信息,因为它们决定了节点的相对...

    二叉树前序中序后序遍历相互求法

    ### 二叉树前序、中序、后序遍历相互求法 #### 前序、中序、后序遍历定义与特性 在理解如何通过两种遍历方式求解第三种之前,我们首先需要明确这三种遍历的基本概念。 - **前序遍历**: 1. 访问根节点 2. 前序...

    数据结构C++二叉树的先序遍历、中序遍历和后序遍历实现

    数据结构C++二叉链表的先序遍历、中序遍历和后序遍历实现

    C++数据结构已知二叉树的前序遍历与中序遍历结果求后序遍历.pdf

    1. 二叉树的定义:一个二叉树是由一组节点组成的数据结构,其中每个节点最多有两个孩子节点,分别是左子节点和右子节点。 2. 二叉树的遍历:二叉树的遍历是指从树的根节点出发,按照某种顺序访问树的每个节点的过程...

    二叉树已知前序和中序遍历,求后序遍历的C++代码实现

    二叉树已知前序和中序遍历,求后序遍历,C++代码已编译通过,可直接运行

    已知先序和中序遍历序列,求后序遍历序列.TXT

    根据给定文件的信息,本文将围绕“已知先序和中序遍历序列,求后序遍历序列”的核心主题进行展开,详细解析其中涉及的数据结构与算法,并深入理解其在C语言中的实现细节。 ### 数据结构:二叉树 在计算机科学中,*...

    有前序中序求后序遍历

    1. **解析输入序列**:首先解析输入的前序和中序遍历序列,其中每个节点用一个小写字母表示。 2. **构建二叉树**:利用前序和中序遍历结果来重建这棵树。 3. **后序遍历输出**:最后进行后序遍历,输出后序遍历序列...

    二叉树已知中序后序求先序

    C语言,数据结构课程,知道中序和后序遍历,画二叉树和写出前序遍历。

    二叉树先中序求后序 给出该二叉树的后序遍历结果;

    给定一个二叉树的先序遍历和中序遍历的结果,可以唯一地重建这个二叉树。这是因为先序遍历的第一个元素是根节点,而中序遍历中根节点左侧的元素属于左子树,右侧的元素属于右子树。通过这个信息,我们可以递归地构建...

    python二叉树遍历、求深度、已知前序中序 求树 求后序 - CSDN博客1

    4. **已知二叉树前序和中序序列还原二叉树** 前序遍历的第一个元素是根节点,中序遍历将根节点左侧的元素放在左侧子树,右侧的元素放在右侧子树。因此,可以先找到前序遍历中根节点的位置,然后分别构建左侧和右侧...

    二叉树前序中序求解树

    在代码实现中,通常会定义一个结构体 `_Node` 来表示二叉树的节点,包含一个字符值 `v` 以及两个指向子节点的指针 `left` 和 `right`。`PreMidCreateTree` 和 `PostMidCreateTree` 函数分别用于根据前序和后序序列...

    二叉树前序、中序、后序遍历相互求法.docx

    假设我们已知二叉树的前序遍历序列和中序遍历序列,现在需要推导出后序遍历序列。这里通过一个具体的例子来讲解整个过程: **例:** - 前序遍历: GDAFEMHZ - 中序遍历: ADEFGHMZ **画树求法:** 1. **确定根节点*...

    二叉树的建立及遍历

    这两个序列结合可以用于构建二叉树,因为前序遍历的第一个元素是根节点,而在中序遍历中找到这个根节点的位置可以将中序序列分割为左右两部分,对应左右子树。 1. **二叉树的构造**: - 输入前序和中序遍历序列,...

    已知二叉树的中序与后序排列求二叉树的先序排列

    这种根据已知的中序和后序遍历序列来构建二叉树的问题,不仅在理论上有重要意义,也是许多算法和软件工程中的一个重要应用。比如在编译原理中,解析表达式树时就会用到类似的技术。 最后,通过这个方法得到的先序...

    数据结构中二叉树的前序遍历

    一棵n个结点的完全二叉树用向量作存储结构,用非递归算法实现对该二叉树进行前序遍历。

    利用二叉树中序及先序遍历确定该二叉树的后序序列

    已知二叉树的中序和先序遍历可以唯一确定后序遍历、已知中序和后序遍历可以唯一确定先序遍历,但已知先序和后序,却不一定能唯一确定中序遍历。现要求根据输入的中序遍历结果及先序遍历结果,要求输出其后序遍历结果...

Global site tag (gtag.js) - Google Analytics