【问题标题】:Tree Traversal. Pre- and Postorder for general trees, inorder only for binary trees?树遍历。一般树的前序和后序,仅适用于二叉树?
【发布时间】:2021-07-02 22:30:45
【问题描述】:

我读到前序和后序遍历也被定义为像这样的一般(n-ary)树:

preOrder(v)
  if(v==null) return;
  print(v)
  for each child w of v
     preOrder(w)

postOrder(v)
  if(v==null) return;
  for each child w of v
     postOrder(w)
  print(v)

但是中序遍历只适用于二叉树。为什么我不能像上面显示的 pre 和 postOrder 示例那样创建 inOrder 遍历方法?

【问题讨论】:

    标签: tree traversal inorder preorder postorder


    【解决方案1】:

    您当然可以定义一个遍历,它是对二叉树的 inordern-ary 泛化。

    对于二叉树来说,inorder 表示访问一个节点是在它的左子节点被访问之后,但在它的右子节点被访问之前。

    对于n-ary,你可以说一个节点应该在它最左边的k个子节点被访问之后,在它的任何其他子节点之前被访问。 k 将是一个预定义的常量,当 k=1 并且您的树恰好是二叉树时,您将拥有与经典 inorder 相同的遍历em> 遍历。

    inOrder(k, v)
      if(v==null) return;
      for each child w among the first k children of v:
          inOrder(k, w)
      print(v)
      for each child w not among the first k children of v:
          inOrder(k, w)
    

    但是正如你所看到的,这有点笨拙,人们可能想知道它是否真的有实际用途。

    【讨论】:

    • 这回答了你的问题吗?
    • 感谢您的回答。但是为什么与前序和后序遍历相比,n 元树的中序遍历没有用处或笨拙呢?
    • 这只是个人意见...我的意思是选择一个k是相当随意的,然后我想知道这样的遍历会有什么实际用途。我想不出来。
    • 好的。谢谢。哪些实际用途对 n 叉树有前后顺序?
    • 预排序可行的一个例子是扩展每个节点到树根的距离。后序实用的一个示例是使用其子树的高度扩展每个节点。在二叉树中,中序遍历在涉及搜索树的情况下是实用的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多