两棵树相等的时候?

时间:2010-10-22 21:21:29

标签: data-structures tree traversal

如果两个二叉树(非二叉搜索树)的有序遍历相同,是否保证两棵树是相同的?

如果答案为否,则有序和预订遍历的内容是一样的吗?

5 个答案:

答案 0 :(得分:9)

绝对不是。两棵树

  b
 / \
a   d
   / \
  c   e

    d
   / \
  b   e
 / \
a   c

都有a b c d e的inorder遍历。事实上,它们是轮换,是一种操作which preserves inorder traversal

答案 1 :(得分:1)

我在想“不。”

两棵树的平衡可能不同,但节点值的“顺序”相同。例如,如果是集合

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将三角形存储在树中。每个节点包含一个三角形或小平面。左边的节点包含所有面在“face”后面的子节点,而右边的子节点包含“front”中的所有内容。按预期递减。

如果您选择场景中最左侧的构面作为根,则右侧孩子将拥有其他所有构面。如果你为正确的孩子做出错误的决定,同样的事情也会发生。完全有可能建立一个BSP编译器,通过白痴分析,构建一个实际上是列表的“树”(如上面的上一个例子)。问题是对数据集进行分区,以便每个节点尽可能平均地划分剩余列表。这是BSP通常在编译时生成的原因之一,因为为非常复杂的几何体构建BSP可能需要数小时才能找到/最佳解决方案。

答案 2 :(得分:1)

没有,用这个简单的例子看到它

   3            2          
  2           1   3
 1           0
0  

两者都有相同的 inorder 遍历 [0,1,2,3]

但如果 inorder 预订遍历相同,那么树就是相同的。

答案 3 :(得分:0)

顺序和前后顺序中的任何一个都唯一地定义树结构。没什么。

答案 4 :(得分:0)

您可以做的一件事是使用级别顺序 5 4 6 2 7
1 3

等级顺序- 5 4 6 2 N N 7 1 3 N N N N N N