二叉树- 遍历& 重建
2017-12-17 13:49
218 查看
给定后序遍历和中序遍历求其后序遍历
建树过程中
左子树右子树的建立一定要注意边界条件
注意点
数组的初始化建树过程中
btn *root = new btn;//new 一定不能忘!
左子树右子树的建立一定要注意边界条件
if(i >= 1) root->left = Build_Tree(io_S, io_S + i - 1, po_S, po_S + i - 1); //右子树的中序从io_S + i + 1 到 io_T,后序从po_S + i + 1 到 po_T if(i + 1 + io_S <= io_T) root->right = Build_Tree(io_S + i + 1, io_T, po_S + i, po_T - 1);
节点的数据结构
struct btn { int data; btn *left; btn *right; };
递归建树的过程
btn *Build_Tree(int io_S, int io_T, int po_S, int po_T)
{
int iolen = io_T - io_S + 1;//计算中根序列的长度
btn *root = new btn;//新建一个节点作为根节点
root->data = PostOrder[po_T];//把根节点的数据域指向后根序列的最后一个元素的值
root->left = NULL;
root->right = NULL;//先把根节点的左右节点指针初始化为空
//在中跟序列中找到根节点的位置
int i = 0;
for(i = 0; i < iolen; ++i)
{
if(InOrder[io_S + i] == root->data)
break;
}
//于是左子树的中序从io_S到io_S + i -1,后序从po_S到po_S + i - 1
if(i >= 1) root->left = Build_Tree(io_S, io_S + i - 1, po_S, po_S + i - 1); //右子树的中序从io_S + i + 1 到 io_T,后序从po_S + i + 1 到 po_T if(i + 1 + io_S <= io_T) root->right = Build_Tree(io_S + i + 1, io_T, po_S + i, po_T - 1);
return root;
}
输出
void preOrder(btn *root) { if(root != NULL) { cout <<root->data<<' '; preOrder(root->left); preOrder(root->right); } }
树的删除(采用后序遍历)
void delete_tree(btn *root) { if(root != NULL) { delete_tree(root->left); delete_tree(root->right); delete root; root = NULL; } }
相关文章推荐
- UVa 11234 Expressions (二叉树重建&由叶往根的层次遍历)
- Python练手之根据前序和中序&根据中序和后序重建二叉树,输出前序、中序和后序遍历结果
- 3.8 二叉树中结点最大的距离 & 重建二叉树 & 顺序遍历二叉树
- 笔试算法题(36):寻找一棵二叉树中最远节点的距离 & 根据二叉树的前序和后序遍历重建二叉树
- UVa 11234 Expressions (二叉树重建&由叶往根的层次遍历)
- 输入某二叉树的前序遍历和中序遍历的结果,重建该二叉树
- 重建二叉树和树的层次遍历
- 根据前序遍历和中序遍历结果重建二叉树(递归方法)
- 面试题23:从上往下打印二叉树(层序遍历) && 面试题25:二叉树中和为某一值的路径
- 如何根据前序遍历和中序遍历重建二叉树
- 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,
- nyoj 1063 - 生活的烦恼 二叉树重建及遍历
- 由前序遍历和中序遍历重建二叉树
- 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树
- 数据结构学习——二叉树的层次遍历:上下左右&下上右左
- 剑指Offer算法题之已知两种遍历方式重建二叉树--面试题6:重建二叉树
- 输入二叉树的前序遍历和中序遍历,重建出该二叉树
- 据前序遍历和中序遍历重建二叉树
- 已知二叉树的前序遍历结果和中序遍历结果,请重建原来的二叉树
- 编程之美——3.9重建二叉树和3.10分层遍历二叉树(Java and C++)