重建二叉树c++
来源:互联网 发布:java中遍历jsonarray 编辑:程序博客网 时间:2024/05/22 06:28
假设有了前序遍历和中序遍历,希望重建这颗树。
在编程之美里看见了这题,于是就心血来潮,写出了下面的算法,不过。。。也不知道对不对, 因为后来看见书上的代码有点长,不知道是不是我考虑不周。
如果知道遍历的结果,我们手动的话很容易就将一棵树还原了,但是通过代码怎么弄呢?
我的想法呢,额
首先手动分析一下;
例如
前序遍历结果: a b d c e f
中序遍历结果: d b a e c f
看前序,a在第一位,所以a 是根,然后在中序中找到a, 分成两部分,在a左边的是左子树,在 右边的是右子树,用递归思想来处理
可得:
a
/ \
b c
/ / \
d e f
树的后序遍历为:d b e f c a
代码:
typedef struct Node{char code;Node *left;Node *right;}Tree, *Position;string mid;//存储前序遍历的结果string mid;;//存储中序遍历的结果void Creat(Position &root, int i, int left, int right)//建树 i是前序的当前访问, left是中序遍历左边界,right是中序遍历的右边界{if (left > right || i >= pre.size())root = NULL;else {root = new Tree;//如果当前节点不是空就建立节点root->code = pre.at(i);for (int k = left; k<= right; k++)//在中序中找到当前节点的位置if (mid.at(k) == pre.at(i)) break;Creat(root->left, ++i, left, k-1);//递归处理左子树Creat(root->right, k - left + i, k+1, right);//递归处理右子树。k - left + i 计算出右子树的左边界}}
结果生成的树的后序遍历为:d b e f c a 跟之前手动分析一样
明显。。对了嘛
如果发现不对,麻烦指正~~~不尽感谢
- 重建二叉树 C语言实现
- 3.9重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 二叉树的重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 重建二叉树
- 重建二叉树
- 将Zen-Cart首页产品以TabControl的形式显示
- java api interface
- Zencart网站配置-常规修改总结
- PHP正则表达式基本概念
- 2013-06-24 股市跳水跌5.3%,银行股一天蒸发2510亿 央行仍作强硬表态
- 重建二叉树c++
- 项目经理不简单(转载)
- 网络营销五步走,细心缜密定成功!
- 中国反击:法国急了要求欧盟开会“对付”中国制裁
- Wintel联盟走向末日,AMD或成催化剂
- 熬之滴水穿石:Spring--精简的J2EE(1)
- PHP如何区分引用参数和传值参数
- Spring学习笔记1——基础知识
- Android入门 错误解决之道(1)之:FATAL EXCEPTION: main