0
所以我有3種方法1使用traverseAdd方法將節點添加到二叉樹中,另一種方法可以找到放置值的位置基於其父節點的樹內。我想消除traverseAdd方法,並使用add方法內的findLocation方法將新值添加到BST。在BST中查找節點位置並遞歸添加到樹中
public void add(int val) {
/*Adds a new node to the binary tree after traversing the tree and figuring out where it belongs*/
Node nodeObjToAdd = new Node(val);
if(root == null){
//if node root is not null root = new node value
root = nodeObjToAdd;
}
Node nodeTraversed = root;
traverseAdd(nodeTraversed, nodeObjToAdd);
}
private void traverseAdd(Node node, Node nodeObjToAdd){
/*Traverses tree and finds a place to add the node to be added by comparing values of the left child and right child of the
* focus node*/
if(nodeObjToAdd.value < node.value){
if(node.leftChild == null){
node.leftChild = nodeObjToAdd;
}
else {
//if the val < the root.value set int he constructor
traverseAdd(node.leftChild, nodeObjToAdd);
}
}
else if(nodeObjToAdd.value > node.value) {
if (node.rightChild == null) {
node.rightChild = nodeObjToAdd;
} else {
traverseAdd(node.rightChild, nodeObjToAdd);
}
}
}
public Node findNodeLocation(Node rootNode, int val) {
/*returns where a the Node after which the value would be added.*/
if(val < rootNode.value && rootNode.leftChild != null){
return rootNode.leftChild;
}
if(val >= rootNode.value && rootNode.rightChild != null){
return rootNode.rightChild;
}
else
return this.root;
}
此功能現在是建立雙根節點。 – user3236101
無論如何重構findNodelocation方法我有,所以它是遞歸? – user3236101
非常漂亮,現在我不知道爲什麼add方法在被調用時添加了兩個不同的根節點,並且無論如何都無法使findNodeLocation遞歸併仍然具有相同的功能。此外,當輸入2個以上的數字時,您的答案會中斷並進入無限循環。 – user3236101