题目
解法
public class BSTNode<T extends Comparable<T>> {
T key;
BSTNode<T> left;
BSTNode<T> right;
BSTNode<T> parent;
public BSTNode(T key, BSTNode<T> parent, BSTNode<T> left, BSTNode<T> right) {
this.key = key;
this.parent = parent;
this.left = left;
this.right = right;
}
}
/**
* 查找当前结点的前驱结点
*
* @param node
* @return
*/
public BSTNode<T> findHeadNode(BSTNode<T> node) {
if (node.left != null) {
BSTNode<T> left = node.left;
// 左子树最右结点
while (left.right != null) {
left = left.right;
}
return left;
} else {
// 当前结点为父节点的右子结点
BSTNode<T> parent = node.parent;
while (parent != null && parent.right != node) {
node = parent;
parent = node.parent;
}
return parent;
}
}
/**
* 查找结点的后继结点
*
* @param node
* @return
*/
public BSTNode<T> findTailNode(BSTNode<T> node) {
// 查找右子树最左节点
if (node.right != null) {
BSTNode<T> right = node.right;
while (right.left != null) {
right = right.left;
}
return right;
} else {
// 当前结点为父节点的左子节点
BSTNode<T> parent = node.parent;
while (parent != null && parent.left != node) {
node = parent;
parent = node.parent;
}
return parent;
}
}