基于根的Java二叉树添加方法
我试图写一个二叉树,add方法不断地覆盖树的根。我有两个方法,一个是接收字符串和节点的递归add方法,另一个是只调用递归方法的常规add方法。任何帮助都将不胜感激基于根的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
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
}