树遍历。一般树的前序和后序,仅二叉树的中序?

时间:2021-04-07 06:17:29

标签: tree traversal inorder preorder postorder

我读到也为一般(n元)树定义了前序和后序遍历:

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 遍历方法?

1 个答案:

答案 0 :(得分:0)

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

对于二叉树来说,inorder 意味着在访问其左孩子之后,但在访问其右孩子之前访问该节点。

对于n-ary,你可以说一个节点应该在它的k个最左边的孩子被访问之后被访问,并且在它的任何其他孩子之前。 k 将是一个预定义的常量,当 k=1 时,并且您的树恰好是二元树,那么您将具有与经典 中序 相同的遍历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)

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