3 回答

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊
試試這個(gè)也許:
private BSTNode<E> getPrevNode(BSTNode<E> node) {
if(node.left != null) {
node = node.left;
while(node.right != null) {
node = node.right;
}
return node;
} else if(node.parent != null) {
// If the node is a right child, return its parent
if(node.parent.right == node) {
return node.parent;
}
// If the node is a left child, move up the tree
// until you are a right child and return its parent
if(node.parent.left == node) {
while(node.parent.right != node) {
// If you reach the root and are never a right child, no previous node return null
if(node.parent == root) {
return null;
}
node = node.parent;
}
return node.parent;
}
}
return null;
}

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊
利亞姆的回答到目前為止也是正確的,但是這是解決它的另一種方法。
private BSTNode<E> getPrevNode(BSTNode<E> node)
{
if(node.left != null)
{
node = node.left;
while(node.right != null)
{
node = node.right;
}
return node;
}
else if(node.parent != null)
{
if(node.parent.right == node)
{
return node.parent;
}
if(node.parent.left == node)
{
while(node.parent != null && node.parent.left == node)
{
node = node.parent;
}
if(node == root)
{
return null;
}
else
{
return node.parent;
}
}
}
return null;
}

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
這是一個(gè)代碼更少的解決方案。
private BSTNode<E> getPrevNode(BSTNode<E> node, int val) {
if (node == null) return null;
BSTNode<E> prev = null;
while (node != null) {
if (val < node.data) {
prev = node;
node = node.left;
} else if (val > node.data) {
prev = node;
node = node.right;
} else {
break;
}
}
return node != null ? prev : null;
}
添加回答
舉報(bào)