这是我编写的用于创建二叉树并在其中插入元素的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);
}
}
另外,我为上述程序编写的前序遍历失败了,我得到了一些无休止的输出。不得不杀死执行!
因此,如果有人能够以递归方式向我提供正确的插入元素到二叉树中的实现,那将会有很大的帮助。
另外,如果可能的话,你能告诉我在我的预订遍历中我犯了哪个错误吗?
提前致谢!
答案 0 :(得分:2)
要回答部分问题,preorder
函数包含一个错误,因为它实际上并不遍历树,而是一遍又一遍地从根开始。将其更改为
public void preorder(Node temp)
{
if(temp != null)
{
System.out.print(temp.data + " ");
preorder(temp.left);
preorder(temp.right);
}
}
并以树的根作为参数调用它。