C++ 把树压平
扁平化数据:当给定一个节点的二叉树时,如何编写一个递归函数来返回节点的链表?(可以修改树) 在这个问题中,压平树意味着什么?我们是否需要在一个列表中维护一个二叉树的所有元素,以及它的左指针和右指针,或者还有另一个我没有得到的捕获C++ 把树压平,c++,C++,扁平化数据:当给定一个节点的二叉树时,如何编写一个递归函数来返回节点的链表?(可以修改树) 在这个问题中,压平树意味着什么?我们是否需要在一个列表中维护一个二叉树的所有元素,以及它的左指针和右指针,或者还有另一个我没有得到的捕获 其次(树可以修改)它们是否意味着fun应该能够处理树的任何修改以及构建?展平仅仅意味着它们希望节点按线性顺序排列。树有几种常见的顺序:前序、中序或后序,其中父节点分别出现在其子节点之前、之间或之后。假设您有这样一个二叉树: a / \ b c /
其次(树可以修改)它们是否意味着fun应该能够处理树的任何修改以及构建?展平仅仅意味着它们希望节点按线性顺序排列。树有几种常见的顺序:前序、中序或后序,其中父节点分别出现在其子节点之前、之间或之后。假设您有这样一个二叉树:
a
/ \
b c
/ \ \
0 0 d
/ \
0 0
其中,a
,b
等为节点,0
为零。该树有几种可能的递归类型:
- 预约,在孩子之前拜访父母:
a b c d
- 按顺序,在孩子之间拜访父母:
b a c d
- 订购后,在孩子之后拜访父母:
b d c a
树的“扁平化”仅仅是遍历产生的列表;您的数据结构不再是嵌套的,而是扁平的。要展平树,请从空链接列表开始。然后按照选择的顺序遍历树,将每个访问的节点附加到链接列表中。我认为“树可以修改”意味着,如果您认为有必要,您的函数可以在构建列表时修改树。但在什么情况下,我们的乐趣会改变树?@cexplorer:没有必要修改它;链表可能包含树中每个节点的副本。如果复制导致性能问题,则可以编写算法以避免复制,方法是共享,或就地编辑树,使其呈现链表的形状。