这是我对二进制Node类的实现:
public class BinaryNode{
int element;
BinaryNode left;
BinaryNode right;
BinaryNode(int theElement,BinaryNode lt,BinaryNode rt){
element=theElement;
left=lt;
right=rt;
}
BinaryNode(int theElement){
this(theElement,null,null);
}
}
这是我在binaryTree类中的insert方法
public class BinaryTree {
private BinaryNode root;
public BinaryTree(){
root= null;
}
BinaryTree(int nodeValue){
root=new BinaryNode(nodeValue);
}
public void insert(BinaryNode node,int x){
if(node==null){
node=new BinaryNode(x);
}
else if(node.element<x){
insert(node.left,x);
}
else if (node.element>x){
insert(node.right,x);
}
else
System.out.println("Duplicates not allowed");
}
我有两个问题 1)如何将元素插入此BinaryTree类,从而创建树。
public static void main (String args[]){
BinaryTree t=new BinaryTree();
t.insert(t.root,5);
}
但是在插入5之后如何调用insert方法来添加整数,如10,12,78,...
2)当我查看一些插入二叉树的代码时,我发现了这段代码。
/**
Inserts the given data into the binary tree.
Uses a recursive helper.
*/
public void insert(int data) {
root = insert(root, data);
}
/**
Recursive insert -- given a node pointer, recur down and
insert the given data into the tree. Returns the new
node pointer (the standard way to communicate
a changed pointer back to the caller).
*/
private Node insert(Node node, int data) {
if (node==null) {
node = new Node(data);
}
else {
if (data <= node.data) {
node.left = insert(node.left, data);
}
else {
node.right = insert(node.right, data);
}
}
return(node); // in any case, return the new pointer to the caller
}
代码看起来与我的相似,但为什么还要使用辅助方法 insert()?它的目的是什么?
有人可以解决帮助我理解这个
答案 0 :(得分:4)
在二叉树中插入元素应该只需要树和元素作为输入。树本身应确定应更新哪个节点。这是通过从root开始的递归函数实现的:这是辅助函数,它作用于节点。
答案 1 :(得分:0)
第一个问题是您无法直接访问t.root,因为它是私有的。你要么需要一个吸气剂
public BinaryNode getRoot() {
return this.root;
}
或公开根
使用辅助方法,因此可以确定BinaryTree的新根。并且因为root不应该返回给调用者。但是,由于将某些内容插入二叉树recursivley更容易,因此使用私有方法来执行此操作。 您可以使用以下方法:
public static void main(String[] args) {
BinaryTree t = new BinaryTree(5); //Create a new tree with one item
t.insert(12); // Assuming that you used the implementation with the helper method
t.insert(3); //
t.insert(t.getRoot(),12); // Assuming you used your implementation
t.insert(t.getRoot(),3); //
}