Tree 树遍历。一般树的前序和后序,只对二叉树排序?

Tree 树遍历。一般树的前序和后序,只对二叉树排序?,tree,traversal,inorder,preorder,postorder,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) 但为了遍历,它只针对二叉树。为什么我不能像上面所示的前序和后序示例那样创建一个按序遍历方

我了解到,一般(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)

但为了遍历,它只针对二叉树。为什么我不能像上面所示的前序和后序示例那样创建一个按序遍历方法?

您当然可以定义一个遍历,它是对二叉树的按序遍历的n元推广

对于二叉树,“按序”意味着在访问其左子节点之后,但在访问其右子节点之前访问节点

例如,对于n元,您可以说一个节点应该在其k个最左边的子节点被访问之后,在其任何其他子节点之前被访问。k将是一个预定义的常量,当k=1时,树恰好是二进制的,那么您的遍历与经典的顺序遍历相同

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元树的前序和后序有哪些实际用途?前序实用的一个例子是用每个节点到树根的距离来扩展每个节点。postorder很实用的一个例子是用子树的高度扩展每个节点。在二叉树中,顺序遍历在涉及搜索树的情况下是实用的。