首页 > 代码库 > 二叉树重建
二叉树重建
一、已知先序遍历和中序遍历,求后序遍历。
根据先序遍历和中序遍历还原二叉树的主要思想:
1、先序遍历序列的第一个元素必定是根节点,可以由此获取二叉树的根节点。
2、根据根节点,在中序遍历序列中查找该节点,由中序遍历的性质可知,中序遍历中该根节点左边的序列必定在根节点的左子树中,而根节点右边的序列必定在右子树中。由此可以知道先序遍历中左子树以及右子树的起止位置。
3、分别对左子树和右子树重复上述的过程,直至所有的子树的起止位置相等时,说明已经到达叶子节点,遍历完毕。
实现代码:
#include<cstdio> #include<cstring> #include<cstdlib> struct Node { char value; Node *left, *right; }; Node *build_new_node(char ch) { Node *p = (Node*)malloc(sizeof(Node)); p->value = http://www.mamicode.com/ch;>
二、已知中序遍历和后序遍历,求先序遍历。根据中序遍历和后序遍历还原二叉树的主要思想:
1、后序遍历序列的最后一个元素必定是根节点,可以由此获取二叉树的根节点。
2、根据根节点,在中序遍历序列中查找该节点,由中序遍历的性质可知,中序遍历中该根节点左边的序列必定在根节点的左子树中,而根节点右边的序列必定在右子树中。由此可以知道后序遍历中左子树以及右子树的起止位置。
3、分别对左子树和右子树重复上述的过程,直至所有的子树的起止位置相等时,说明已经到达叶子节点,遍历完毕。
实现代码:#include<cstdio> #include<cstring> #include<cstdlib> struct Node { char value; Node *left, *right; }; Node *build_new_node(char ch) { Node *p = (Node*)malloc(sizeof(Node)); p->value = http://www.mamicode.com/ch;>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。