我正在使用二进制搜索树,我在更新/添加当前节点的父节点时遇到了一些问题。父节点没有正确更新。这就是我想要做的事情:
public class binarytree {
private Node root;
static class Node{
Node left;
Node right;
int value;
Node parent;
public Node(Node parent,int value)
{
this.value = value;
this.left = null;
this.right = null;
this.parent = parent;
}
}
public void creatBST()
{
root = new Node(null,4);
System.out.println("Binary Search tree with root = "+ root.value);
insert(root,1);
insert(root,2);
insert(root,3);
insert(root,6);
insert(root,5);
insert(root,7);
}
public void insert(Node node, int value)
{
Node prevnode = node;
if(value < node.value)
{
if(node.left != null)
{
insert(node.left, value);
System.out.println("Parent node of node"+ node.left.value+"is:"+prevnode.value);
}
else
{
node.left = new Node(prevnode,value);
}
}
else if(value > node.value)
{
if(node.right != null)
{
//prevnode = node;
insert(node.right, value);
System.out.println("Parent node of node"+ node.right.value+"is:"+prevnode.value);
}
else
{
node.right = new Node(prevnode,value);
}
}
}
public static void main(String args [])
{
binarytree obj = new binarytree();
obj.creatBST();
//obj.printInOrder();
//obj.check();
}
}
我得到的输出是:
Binary Search tree with root = 4
Parent node of node1is:4
Parent node of node2is:1
Parent node of node1is:4
Parent node of node6is:4
Parent node of node6is:4
这不是正确的输出。
需要帮助我确定如何正确地做到这一点。
答案 0 :(得分:3)
看起来节点的插入工作正常。 print语句是错误的,因为在递归调用之后调用它们以插入下一个Node。例如,在插入(root,1)之后,您的函数可以工作,并且您具有以下结构:
4
/
1
现在当你调用insert(root,2)时,你最终会在代码中结束:
if(node.left != null)
{
insert(node.left, value);
System.out.println("Parent node of node"+ node.left.value+"is:"+prevnode.value);
}
调用insert(node.left,value),然后发生print语句。所以,虽然你的新树看起来像这样:
4
/
1
\
2
下一个印刷声明
System.out.println("Parent node of node"+ node.left.value+"is:"+prevnode.value);
将打印出node.left.value为1和prevnode.value为4.您可能希望更改print语句的位置,或者编写打印节点和父节点的新方法。
编辑: 我会在你的main方法中运行这个方法来测试树结构:
public void printParents(Node n){
if(n.left!= null){
printParents(n.left);
}
if(n.right!=null){
printParents(n.right);
}
if(n.parent != null){
System.out.println("Parent of " + n.value + " is " + n.parent.value);
}
else{
System.out.println("The root node is" + n.value);
}
}
我在这里打电话:
public static void main(String args [])
{
binarytree obj = new binarytree();
obj.creatBST();
Node n = obj.root;
obj.printParents(n);
//obj.printInOrder();
//obj.check();
}
答案 1 :(得分:1)
对于初学者,您可能想要修复插入方法:
Node currentNode;
public void setCurrentNode(Node node) {
currentNode = node;
}
public boolean insert(int value) {
//You should probably insert from an instance variable, not an explicit parameter
Node n = new Node(currentNode, value);
if (currentNode.left == null) currentNode.left = n;
else if (currentNode.right == null) currentNode.right = n;
else return false; //If insert failed because currentNode was full
return true;
}