问题描述
我读到也为一般(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 遍历方法?
解决方法
您当然可以定义一个遍历,它是二叉树的 inorder 的 n-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)
但是正如你所看到的,这是一个有点笨拙的遍历,人们可能想知道它是否真的有实际用途。