二进制搜索树的伪代码

时间:2015-04-23 23:18:21

标签: algorithm data-structures binary-search-tree

在二叉搜索树中,键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
}

2 个答案:

答案 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);
}