这是我编写的 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/