三叉树的前序遍历

Preorder traversal of ternary tree

我需要执行三元树的前序遍历。二叉树上的这种遍历我很熟悉,比如:

public void preorder(){

   System.out.println(data); 
   if (left != null)
      left.preorder();
   if (right != null)
      right.preorder();
}

这里按照Root, Left, Right的顺序遍历。我对如何添加中间子节点感到困惑。如果有人可以解释这一点,那就太好了。谢谢

一般n叉树的前序遍历如下:

  • 遍历节点本身
  • 如果存在,则遍历child0
  • 如果存在,遍历child1
  • ...
  • 如果存在,则遍历childn

二叉树正好只有child0(左)和child1(右),但是三叉树还有一个中间.所以你的遍历在遍历左右子树之间会有一个额外的语句:

if (middle != null)
    middle.preorder();

遍历左右节点之间的中间节点

public void preOrder(Node node) {
    if (node == null) {
        return;
    }
    System.out.print(" " + node.data);
    preOrder(node.left);
    preOrder(node.middle);
    preOrder(node.right);
}