题目地址:
https://leetcode.com/problems/inorder-successor-in-bst-ii/description/
给定一棵二叉树,每个节点存了其左右孩子和父亲节点的指针,问给定节点 x x x的后继是谁。若不存在则返回空。
如果 x x x为空,则其没有后继;如果 x x x不空但有右孩子,则其右孩子所在的左链的最左端点即为 x x x后继;如果 x x x不空也没有右孩子,但有父亲,则顺着其父亲向上走,第一次右拐的时候,就找到了 x x x的后继;如果 x x x不空,没有右孩子也没有父亲,则其无后继。代码如下:
class Solution {
public:
Node* inorderSuccessor(Node* node) {
if (!node) return nullptr;
if (node->right) {
node = node->right;
while (node->left) node = node->left;
return node;
} else if (node->parent) {
while (node->parent && node->parent->left != node) node = node->parent;
return node->parent;
} else return nullptr;
}
};
时间复杂度 O ( h ) O(h) O(h),空间 O ( 1 ) O(1) O(1)。