java - 二叉树的后序遍历

标签 java inorder

我正在学习对二叉树的树遍历进行编码。到目前为止,我已经从网上的许多教程中得出了这一点。然而,当我尝试进行任何遍历时,我遇到了无限循环。我哪里出错了?

class Node {
int value;
String name;

Node lchild = null;
Node rchild = null;

Node(int key, String name) {
    this.value = key;
    this.name = name;
    }
}

public class genTrees {

Node root;

public void addNode(int key, String s) {
    Node newnode = new Node(key, s);
    if (root == null) {
        System.out.println("Added Root");
        root = newnode;
    } else {
        Node focusNode = root;
        Node parent;
        while (true) {
            parent = focusNode;
            if (key <= focusNode.value) {
                focusNode = focusNode.lchild;
                if (focusNode == null) {
                    System.out.println("Added on Left" + key);
                    parent.lchild = newnode;
                    return; // All done
                }
            }
            if (key > focusNode.value) {
                focusNode = focusNode.rchild;
                if (focusNode == null) {
                    System.out.println("Added on Right" + key);
                    parent.rchild = newnode;
                    return;
                }
            }
        }
    }
}

void inOrder(Node n) {
    while (n != null) {
        inOrder(n.lchild);
        System.out.println(n);
        inOrder(n.rchild);
    }
}

谢谢!

最佳答案

以下循环:

while (n != null) {
    inOrder(n.lchild);
    System.out.println(n);
    inOrder(n.rchild);
}

如果n == null将永远运行。并将在每次迭代中继续调用递归方法。也许,你应该将其更改为:

if (n != null) {
    inOrder(n.lchild);
    System.out.println(n);
    inOrder(n.rchild);
}

关于java - 二叉树的后序遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18881251/

相关文章:

java - 在 Java 中标准化西类牙日期

java - 使用正则表达式拆分字符在java中返回一个空值

algorithm - 有两个以上 child 的树的预序和中序

python - 使用 python 进行二叉树修剪 [postorder 方法不起作用]

data-structures - 有人能解释一下中序树遍历的逻辑吗?

java - java中如何通过递归返回值列表?

java - 如何使 Spring 复选框默认选中?

java - 如何启用 bean validator - Spring boot

java - 如何进一步调试以公开 groovy 脚本中元素中的值

algorithm - 不构造二叉树的后序Inorder到Preorder的转换