【发布时间】:2010-10-22 21:21:29
【问题描述】:
如果两棵二叉树(不是二叉搜索树)的中序遍历相同,是否保证两棵树相同?
如果答案是否定的,那么中序遍历和前序遍历都一样呢?
【问题讨论】:
标签: data-structures tree traversal
如果两棵二叉树(不是二叉搜索树)的中序遍历相同,是否保证两棵树相同?
如果答案是否定的,那么中序遍历和前序遍历都一样呢?
【问题讨论】:
标签: data-structures tree traversal
绝对不是。两棵树
b
/ \
a d
/ \
c e
和
d
/ \
b e
/ \
a c
两者都有a b c d e的中序遍历。它们实际上是旋转,一个操作which preserves inorder traversal。
【讨论】:
NO,通过这个简单的例子可以看出
3 2
2 1 3
1 0
0
两者都有相同的inorder遍历[0,1,2,3]
但如果 inorder 和 preorder 遍历相同,则树是相等的。
【讨论】:
我在想“不”。
两棵树的平衡可能不同,但节点值的“顺序”相同。例如,如果,集合
1,2,3,4,5,6,7
你建一棵树:
4
2 6
1 3 5 7
按顺序遍历将产生 1,2,3,4,5,6,7。
但是,如果您选择不同的根节点(如果列表没有事先正确排序)
5
4 6
2 7
1 3
这两棵树将给出相同的中序遍历结果,但(显然)不相同。
甚至
7
6
5
4
3
2
1
等等。
这也与 BSP(二进制空间分区)树的问题有关,通常用于游戏开发碰撞检测和可见性确定。
BSP 将三角形存储在树中。每个节点都包含一个三角形或小平面。左节点包含刻面“后面”的所有子节点,而右子节点包含“前面”的所有子节点。按预期递归。
如果您选择场景中最左边的切面作为根,那么右边的子节点将拥有所有其他切面。如果你为正确的孩子做出了错误的决定,同样的事情也会发生。完全有可能构建一个 BSP 编译器,通过愚蠢的分析,构建一个实际上是一个列表的“树”(如我上面的最后一个示例)。问题是对数据集进行分区,以便每个节点尽可能平均地划分剩余的列表。这是 BSP 通常在编译时生成的原因之一,因为为非常复杂的几何图形构建 BSP 可能需要数小时才能找到/最佳解决方案。
【讨论】:
中序和前序或后序中的任何一个,唯一地定义一个树结构。一点也不差。
【讨论】:
您可以做的一件事是使用级别顺序
5
4 6
2 7
1 3
级别顺序- 5 4 6 2 N N 7 1 3 N N N N N N
【讨论】: