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:没有必要修改它;链表可能包含树中每个节点的副本。如果复制导致性能问题,则可以编写算法以避免复制,方法是共享,或就地编辑树,使其呈现链表的形状。