Data structures 当两棵树相等时?

Data structures 当两棵树相等时?,data-structures,tree,traversal,Data Structures,Tree,Traversal,如果按顺序遍历两棵二叉树(不是二叉搜索树)是相同的,它是否保证这两棵树是相同的 如果答案是“否”,那么顺序遍历和预顺序遍历都是相同的吗?肯定不是。两棵树 b / \ a d / \ c e 及 两者都有一个顺序遍历abcde。事实上,它们是旋转,一种操作。我认为“不” 两棵树的平衡可能不同,但节点值的“顺序”相同。例如,如果 1,2,3,4,5,6,7 您可以构建一棵树: 4 2 6 1 3 5 7 按顺序遍历将产

如果按顺序遍历两棵二叉树(不是二叉搜索树)是相同的,它是否保证这两棵树是相同的


如果答案是“否”,那么顺序遍历和预顺序遍历都是相同的吗?

肯定不是。两棵树

  b
 / \
a   d
   / \
  c   e

两者都有一个顺序遍历
abcde
。事实上,它们是旋转,一种操作。

我认为“不”

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

1,2,3,4,5,6,7
您可以构建一棵树:

         4
      2    6
   1   3  5   7
按顺序遍历将产生1,2,3,4,5,6,7

但是,如果选择不同的根节点(如果列表事先没有正确排序)

这两棵树将给出相同的顺序遍历结果,但(显然)不相同

甚至

      7
     6
    5
   4
  3
 2
1
等等

这也与BSP(二进制空间分区)树的问题有关,BSP树通常用于游戏开发冲突检测和可见性确定

BSP将三角形存储在树中。每个节点都包含一个三角形或镶嵌面。左侧节点包含面“后面”的所有子节点,而右侧子节点包含面“前面”的所有子节点。按预期递归


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

,通过这个简单的示例可以看出这一点

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


但如果按序遍历和按序遍历相同,则树是相等的。

按序遍历和按序遍历中的任何一个,唯一地定义树结构。同样如此。

您可以做的一件事是使用级别顺序 5. 4 6 27
13


lvel顺序-5 4 6 2 N 7 1 3 N

或者如果顺序和后序遍历相同,我们得到了相同的结论。
      7
     6
    5
   4
  3
 2
1
   3            2          
  2           1   3
 1           0
0