基于根的Java二叉树添加方法

基于根的Java二叉树添加方法,java,recursion,binary-tree,Java,Recursion,Binary Tree,我试图写一个二叉树,add方法不断地覆盖树的根。我有两个方法,一个是接收字符串和节点的递归add方法,另一个是只调用递归方法的常规add方法。任何帮助都将不胜感激 public Node recAdd(String event , Node tNode ){ //tNode -> tree node if (tNode == null){ // Addition place found root = new Node(event); Syst

我试图写一个二叉树,add方法不断地覆盖树的根。我有两个方法,一个是接收字符串和节点的递归add方法,另一个是只调用递归方法的常规add方法。任何帮助都将不胜感激

public   Node recAdd(String event , Node tNode ){
//tNode -> tree node         
  if (tNode == null){
  // Addition place found
    root = new Node(event); 
    System.out.println("added root");
  }
  else if (tNode.event.compareTo(event) <= 0){
   tNode.setLeft(recAdd(event, tNode.getLeft()));   
   // System.out.println("added left");// Add in left subtree
  }
  else{
    tNode.setRight(recAdd(event, tNode.getRight()));
    //   System.out.println("added right");
  }// Add in right subtree
  return tNode;
}
我的节点类如下所示

public class Node {
  Node left;
  Node  right;
  String event;

  Node(String event){
    this.event = event;
    this.left = null;
    this.right = null;  
  }

  public void setEvent(String event){
    this.event = event;
  } 
  public void setLeft(Node left){
    this.left = left;
  } 
  public void setRight(Node right){
    this.right = right;
  } 

  public  String getEvent(){
    return event;
  }

  public Node getLeft(){
    return left;
  }
  public Node getRight(){
    return right;
  }
}    

无论何时找到插入当前节点的位置,都将替换根节点:

public Node recAdd(String event, Node tNode) {
    //tNode -> tree node         
    if (tNode == null) {
      // Addition place found
      root = new Node(event);     // Problem is RIGHT HERE
      System.out.println("added root");
    }
  //...
}

所发生的情况是,您递归地搜索树,直到到达尚未分配的节点(即,
null
)。此时,您正在覆盖根节点,而不是创建新节点

例如:

        root
       /    \
    node     null <- You want to assign this node, not overwrite root
   /    \ 
 null   null

我建议你调试一下,找出哪里出了问题。
        root
       /    \
    node     null <- You want to assign this node, not overwrite root
   /    \ 
 null   null
public   Node recAdd(String event , Node tNode ){       
    if (tNode == null){
        tNode = new Node(event);  // <--- Don't overwrite root
    }
    else if (tNode.event.compareTo(event) <= 0){
        tNode.setLeft(recAdd(event, tNode.getLeft()));   
    }
    else{
        tNode.setRight(recAdd(event, tNode.getRight()));
    }
    return tNode;
}
public  void add(String event){
    root = recAdd(event , root); // <-----Reassign root
}