第十周 项目3
来源:互联网 发布:矩阵除法 编辑:程序博客网 时间:2024/05/18 03:44
1.由先序序列和中序序列构造二叉树
- 定理:任何n(n≥0)个不同节点的二叉树,都可由它的中序序列和先序序列唯一地确定。
- 证明(数学归纳法)
基础:当n=0时,二叉树为空,结论正确。
假设:设节点数小于n的任何二叉树,都可以由其先序序列和中序序列唯一地确定。
归纳:已知某棵二叉树具有n(n>0)个不同节点,其先序序列是a0a1…an−1 ;中序序列是b0b1…bk−1bkbk+1…bn−1 。- 先序遍历“根-左-右”,
a0 必定是二叉树的根节点 a0 必然在中序序列中出现,设在中序序列中必有某个bk(0≤k≤n−1) 就是根节点a0 。- 由于
bk 是根节点,中序遍历“左-根-右”,故中序序列中b0b1…bk−1 必是根节点bk(a0) 左子树的中序序列,即bk 的左子树有k个节点,bk+1…bn−1 必是根节点bk(a0) 右子树的中序序列,即bk 的右子树有n−k−1 个节点。 - 对应先序序列,紧跟在根节点
a0 之后的k个节点a1…ak 是左子树的先序序列,ak+1…an−1 这n−k−1 就是右子树的先序序列。 - 根据归纳假设,子先序序列
a1…ak 和子中序序列b0b1…bk−1 可以唯一地确定根节点a0 的左子树,而先序序列ak+1…an−1 和子中序序列bk+1…bn−1 可以唯一地确定根节点a0 的右子树。 - 综上所述,这棵二叉树的根节点己经确定,而且其左、右子树都唯一地确定了,所以整个二叉树也就唯一地确定了。
- 先序遍历“根-左-右”,
例
根据定理的证明,写出下面的算法。
品味:以上构造性证明是突出体现计算机科学的案例。计算机学科的精髓就在于制造,即使在“理论性”味道的定理中,其证明过程,给出的就是“存在的这么一个东西”的构造方法。
[参考解答](btreee.h见算法库)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
2.由后序序列和中序序列构造二叉树
- 定理:任何n(n>0)个不同节点的二叉树,都可由它的中序序列和后序序列唯一地确定。
- 证明:(略)
[参考解答](btreee.h见算法库)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
3.由顺序存储结构转为二叉链存储结构
[参考解答](btreee.h见算法库)
阅读全文
0 0
- 第十周项目3
- 第十周项目3
- 第十周项目3
- 第十周 项目3
- 第十周 项目3
- 第十周 项目3
- 第十周 项目3-3
- 第十周项目1-3
- 第十周项目一 3:
- 第十周项目4-3
- 第十周 项目3-1
- 第十周 项目3-2
- 第十周 项目3-4
- 第十周 项目3-5
- 第十周项目训练3
- 第十周项目一 3
- 第十周第十一周项目1阅读程序(3)
- 第十周第十一周项目2(3)
- 关于SSH无密登录出现的一些细节问题
- GVE基金会亮相北京中关村 出席区块链前沿技术分享论坛
- 针对摄像机很难对准物体问题
- 水仙花数
- Ndk学习之JNI方法和静态方法(java-->C)
- 第十周 项目3
- pycharm当中,如何导入python2或者python3环境
- 教你解决Python数据分析可视化时可以显示中文
- 哈希算法-Top K
- 封装jdbc
- 关于unit3d中GUI texture 的相关问题
- 自我怀疑的开发者:你够好吗?
- 【C#】自己写构造string.Join()方法
- 在java中String a="a",b="a";a==b为什么返回true?