写出TREE-PREDECESSOR的伪代码(算法导论第三版12.2-3)
TREE-PREDECESSOR(x)
if x.left != NIL
return TREE-MAXIMUM(x.left)
y = x.p
while y != NIL and x == y.left
x = y
y = y.p
return y
下面是c++代码
template<typename T>
BinaryTreeNode<T>* tree_predecessor(BinaryTreeNode<T>* node)
{
if(node == nullptr) return node;
if(node->left!= nullptr)
return tree_maximum(node->left);
BinaryTreeNode<T>* parent = node->parent;
while (parent!= nullptr && node == parent->left)
{
node = parent;
parent = parent->parent;
}
return parent;
}