展平树

时间:2012-08-09 00:57:54

标签: c++

展平数据:当给定节点的二叉树时,如何编写返回节点链表的递归函数? (树可以修改)

在这个问题中,树的扁平化意味着什么?我们是否需要在列表中使用左右指针维护二叉树的所有元素,或者还有另一个我没有得到的捕获?

其次(树可以被修改)它们是否意味着乐趣应该能够处理树的任何修改以及构建?

2 个答案:

答案 0 :(得分:3)

假设你有一个像这样的二叉树:

    a
   / \
  b   c
 / \   \
0   0   d
       / \
      0   0

ab等是节点,0是nil。树有几种可能的递归traversals

  • 预订,在孩子面前拜访父母:a b c d

  • 按顺序访问儿童之间的父母:b a c d

  • 订购后,探望孩子的父母:b d c a

树的“扁平化”仅仅是遍历产生的列表;您的数据结构不再嵌套,而是扁平化。要展平树,请从空链表开始。然后按您选择的顺序遍历树,将每个访问的节点附加到链接列表。我认为“树可以被修改”意味着你的函数可能会在构建列表时改变树,如果你认为有必要这样做。

答案 1 :(得分:2)

展平只是意味着他们希望节点按线性顺序排列。树有几种常见的排序:预序,顺序或后序,其中父节点分别出现在其子节点之前,之间或之后。