如题,好像大学的课后作业。写一个练练手。网上不少,大多都是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++编写已通过编译
这里我们将重点讨论如何在已知二叉树的前序和中序遍历的情况下,通过非递归算法实现后序遍历。 **前序遍历**:根节点 -> 左子树 -> 右子树 **中序遍历**:左子树 -> 根节点 -> 右子树 **后序遍历**:左子树 -> 右子...
已知中序遍历和后序遍历,求前序遍历。有比较详尽的中文注释。
根据题目描述,我们需要编写一个程序,该程序能够接收两行输入,分别是先序遍历序列和中序遍历序列,并根据这两组序列重建二叉树。 1. **定义节点结构**:首先,我们需要定义一个结构体`BTNode`来表示二叉树中的每...
二叉树的节点通常包含一个值和两个指针,分别指向其左子树和右子树。 递归建立二叉树通常基于已知的节点序列,如前序遍历、中序遍历或后序遍历的序列。这些遍历方式提供了构建树的信息,因为它们决定了节点的相对...
数据结构C++二叉链表的先序遍历、中序遍历和后序遍历实现
1. 二叉树的定义:一个二叉树是由一组节点组成的数据结构,其中每个节点最多有两个孩子节点,分别是左子节点和右子节点。 2. 二叉树的遍历:二叉树的遍历是指从树的根节点出发,按照某种顺序访问树的每个节点的过程...
二叉树已知前序和中序遍历,求后序遍历,C++代码已编译通过,可直接运行
根据给定文件的信息,本文将围绕“已知先序和中序遍历序列,求后序遍历序列”的核心主题进行展开,详细解析其中涉及的数据结构与算法,并深入理解其在C语言中的实现细节。 ### 数据结构:二叉树 在计算机科学中,*...
1. **解析输入序列**:首先解析输入的前序和中序遍历序列,其中每个节点用一个小写字母表示。 2. **构建二叉树**:利用前序和中序遍历结果来重建这棵树。 3. **后序遍历输出**:最后进行后序遍历,输出后序遍历序列...
C语言,数据结构课程,知道中序和后序遍历,画二叉树和写出前序遍历。
给定一个二叉树的先序遍历和中序遍历的结果,可以唯一地重建这个二叉树。这是因为先序遍历的第一个元素是根节点,而中序遍历中根节点左侧的元素属于左子树,右侧的元素属于右子树。通过这个信息,我们可以递归地构建...
4. **已知二叉树前序和中序序列还原二叉树** 前序遍历的第一个元素是根节点,中序遍历将根节点左侧的元素放在左侧子树,右侧的元素放在右侧子树。因此,可以先找到前序遍历中根节点的位置,然后分别构建左侧和右侧...
在代码实现中,通常会定义一个结构体 `_Node` 来表示二叉树的节点,包含一个字符值 `v` 以及两个指向子节点的指针 `left` 和 `right`。`PreMidCreateTree` 和 `PostMidCreateTree` 函数分别用于根据前序和后序序列...
假设我们已知二叉树的前序遍历序列和中序遍历序列,现在需要推导出后序遍历序列。这里通过一个具体的例子来讲解整个过程: **例:** - 前序遍历: GDAFEMHZ - 中序遍历: ADEFGHMZ **画树求法:** 1. **确定根节点*...
这两个序列结合可以用于构建二叉树,因为前序遍历的第一个元素是根节点,而在中序遍历中找到这个根节点的位置可以将中序序列分割为左右两部分,对应左右子树。 1. **二叉树的构造**: - 输入前序和中序遍历序列,...
一棵n个结点的完全二叉树用向量作存储结构,用非递归算法实现对该二叉树进行前序遍历。
已知二叉树的中序和先序遍历可以唯一确定后序遍历、已知中序和后序遍历可以唯一确定先序遍历,但已知先序和后序,却不一定能唯一确定中序遍历。现要求根据输入的中序遍历结果及先序遍历结果,要求输出其后序遍历结果...
二叉搜索树(排序二叉树),树的遍历(前序、中序、后序)【数据结构和算法入门7】