【问题标题】:Preorder traversal of ternary tree三叉树的前序遍历
【发布时间】:2016-08-06 03:04:43
【问题描述】:

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

public void preorder(){

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

这将按照 Root、Left、Right 的顺序遍历。我很困惑如何通过添加中间子节点来做到这一点。如果有人能解释这一点,那就太好了。谢谢

【问题讨论】:

  • 你不会在左右中间做一个递归调用吗?
  • 这就是我的想法,但我不确定这是否绝对是正确的语法。我只是在寻找确认
  • 我想就是这样。 if (middle) middle.preorder(); 在左边之后,在右边之前。
  • 是的,这对我来说是正确的。谢谢!

标签: java tree-traversal preorder ternary-tree


【解决方案1】:

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

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

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

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

【讨论】:

  • 完美。感谢您的帮助
  • @NickCastello 欢迎您。如果您对答案感到满意并且不寻求进一步的帮助,请考虑通过单击旁边的灰色复选框来接受答案(将在 4 分钟后显示)。这将使其他网站访问者知道您的问题已解决,并为您赢得 Stack Overflow 上的新徽章。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-08
    • 2017-03-14
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    相关资源
    最近更新 更多