[英]Updating parent node in Binary search tree in JAVA
我正在二叉搜索樹上工作,並且在更新/添加當前節點的父節點時遇到一些問題。父節點未正確更新。這是Iam試圖做的:
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
這不是正確的輸出。
需要幫助我確定如何正確執行操作。
看來插入節點工作正常。 打印語句是錯誤的,因為在遞歸調用之后將其插入以插入下一個Node。 例如,在執行insert(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。您可能想要更改打印語句的位置,或編寫一個新方法來打印節點和父節點。
編輯:我將在您的主要方法中運行此方法以測試樹結構:
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();
}
對於初學者,您可能需要修復insert方法:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.