展平数据:当给定节点的二叉树时,如何编写返回节点链表的递归函数? (树可以修改)
在这个问题中,树的扁平化意味着什么?我们是否需要在列表中使用左右指针维护二叉树的所有元素,或者还有另一个我没有得到的捕获?
其次(树可以被修改)它们是否意味着乐趣应该能够处理树的任何修改以及构建?
答案 0 :(得分:3)
假设你有一个像这样的二叉树:
a
/ \
b c
/ \ \
0 0 d
/ \
0 0
a
,b
等是节点,0
是nil。树有几种可能的递归traversals:
预订,在孩子面前拜访父母:a b c d
按顺序访问儿童之间的父母:b a c d
订购后,探望孩子的父母:b d c a
树的“扁平化”仅仅是遍历产生的列表;您的数据结构不再嵌套,而是扁平化。要展平树,请从空链表开始。然后按您选择的顺序遍历树,将每个访问的节点附加到链接列表。我认为“树可以被修改”意味着你的函数可能会在构建列表时改变树,如果你认为有必要这样做。
答案 1 :(得分:2)
展平只是意味着他们希望节点按线性顺序排列。树有几种常见的排序:预序,顺序或后序,其中父节点分别出现在其子节点之前,之间或之后。