<分区>
我正在创建二叉搜索树类,我的所有函数都接受了 Successor。
我的树输入是 30 10 45 38 20 50 25 33 8 12
当我打印 Inorder traversal 时,它显示为
8 10 12 20 25 30 33 38 45 50
当我输入值 8 时,它表示其后继值是 12。输入 10 和 12 本身也是如此。
当我输入值 33 时,它说继任者是 50。其实不是。
我似乎无法修复它。任何建议的帮助将不胜感激。
我在 main 中这样调用它:
BinarySearchTree BST = new BinarySearchTree(array);
BST.getSeccessor(a); // where a is user input to find it successor
以下是我的代码...
public TreeNode Successor(TreeNode node) {
if (node == null)
return node;
if (node.right != null) {
return leftMostNode(node.right);
}
TreeNode y = node.parent;
while (null != y && (y.right).equals(node)) {
node = y;
y = y.parent;
}
return y;
}
public static TreeNode leftMostNode(TreeNode node) {
if (null == node) { return null; }
while (null != node.left) {
node = node.left;
}
return node;
}
/** Search value in Tree need for Successor **/
public TreeNode Search(int key) {
TreeNode node = root;
while (node != null) {
if (key < node.value) {
node = node.left;
} else if (key > node.value) {
node = node.right;
}
return node;
}
return null;
}
/** Returns Successor of given value **/
public int getSuccessor(int val) {
TreeNode node = Successor(Search(val));
return node.value;
}