在二叉搜索树中,键x的前导是小于的键y x,并且没有其他键z使得z小于x和更大 比y。
给出一个算法的伪代码,该算法接受一个密钥x并返回 如果x是树中的最小键,则前导y或nil。假设二进制 搜索树使用数组left,right和parent表示。给出伪代码 对于任何使用的附属功能。
我不确定如何处理这个问题。但继承了我的尝试:
伪代码:
//Takes in key x
BST(x)
{
if ( x < parent[x] )
return nil
if( parent[x] < x )
return parent[x] // parent[x] = y
}
答案 0 :(得分:0)
我以前的回答来自你的问题的简短描述 - 你正在寻找的只是树中的前身。 http://www.quora.com/How-can-you-find-successors-and-predecessors-in-a-binary-search-tree-in-order
这是他们在该帖子中使用的代码:
public static TreeNode findPredecessor(TreeNode node)
{
if (node == null)
return null;
if (node.getLeft() != null)
return findMaximum(node.getLeft());
TreeNode parent = node.getParent();
TreeNode y = parent;
TreeNode x = node;
while (y != null && x == y.getLeft())
{
x = y;
y = y.getParent();
}
return y;
}
答案 1 :(得分:0)
如果不存在任何左节点,那么将没有任何前任节点。否则,左子树中的max元素将成为前任
public int findmax(Node root) {
if (root == NULL)
return INT_MIN;
int res = root->data;
int lres = findMax(root->left);
int rres = findMax(root->right);
if (lres > res)
res = lres;
if (rres > res)
res = rres;
return res;
}
public int findPredecessor(Node node) {
if(node == null) return null;
if(node->left == null) return null;
return findMax(node->left);
}