java - 如何递归插入二叉树并递归打印元素?

标签 java data-structures binary-tree

这是我编写的 Java 程序,用于创建二叉树并向其中插入元素。但是,我无法编写递归插入元素的程序,因此必须分别手动指定左子元素和右子元素。

这是我的代码:

public class BinTree {

private Node root;

private class Node {
Node left;
Node right;
int data;

private Node(int data) {
    this.data = data;
    left = null;
    right = null;
}
}
public BinTree() {
root = null;
}
public void preorder(Node temp) {
temp = root;
if(temp != null) {
    System.out.print(temp.data + " ");
    preorder(temp.left);
    preorder(temp.right);
}
}
public void add() {

root = new Node(10);
root.left = new Node(20);
root.right = new Node(30);
root.left.left = new Node(40);
root.left.right = new Node(50);
root.right.left = new Node(60);
}
public static void main(String[] args) {

BinTree bt = new BinTree();
bt.add();
System.out.print(bt.root.data);
System.out.print(" " + bt.root.left.data);
System.out.print(" " + bt.root.right.data);
System.out.print(" " + bt.root.left.left.data);
System.out.print(" " + bt.root.left.right.data);
}
}

此外,我为上述程序编写的前序遍历失败了,并且我得到了一些无休止的输出。不得不杀死执行!

因此,如果有人可以为我提供递归地将元素插入二叉树的正确实现,那将会有很大的帮助。

另外,如果可能的话,您能告诉我我在预购遍历中哪里出错了吗?

提前致谢!

最佳答案

为了部分回答这个问题,preorder 函数包含一个错误,因为它实际上并不遍历树,而是一遍又一遍地从根开始。将其更改为

public void preorder(Node temp)
{
    if(temp != null)
    {
        System.out.print(temp.data + " ");
        preorder(temp.left);
        preorder(temp.right);
    }
}

并以树的根作为参数来调用它。

关于java - 如何递归插入二叉树并递归打印元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45084665/

相关文章:

java - 禁用 JButton 时 JFrame 焦点问题

tree - 只有一个节点的树的高度

java - 如何在Java中返回二叉树中最频繁的元素

具有调用者工作窃取的自定义池的 Java parallelStream()?

java - 如何在 GlassFish 中使用属性文件

c - 从中缀到后缀

java - 读取/存储大量多维数据的最快方法? ( java )

c - BST 中的顺序后继者

c - 如何在二叉树中搜索与给定值 x 的匹配项?

java - Intellij 未检测到 Play 语法