将元素插入二叉树

时间:2014-05-24 15:56:11

标签: java data-structures binary-tree

这是我对二进制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()?它的目的是什么?
有人可以解决帮助我理解这个

2 个答案:

答案 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);   //
}