0%

面试题 04.06.后继者

题目

后继者

思路

直接进行中序遍历,当找到指定节点时,让 loop = true,然后继续递归,若loop && !res 时,则赋值,否则 return

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode *res = NULL;
bool loop = false;
void InorderTra(TreeNode *root, TreeNode* p){
if(root == NULL) return;
InorderTra(root->left, p);
if(loop){ // 已经找到指定节点
if(res == NULL) // 下一节点还没确定
res = root;
else // 下一节点已经确定
return;
}
else if(root == p) loop = true;
InorderTra(root->right, p);
}
TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) {
InorderTra(root, p);
return res;
}
};
  • 时间复杂度:O(n),其中 n 是二叉树中节点的个数
  • 空间复杂度:O(1)

执行用时:20 ms, 在所有 C++ 提交中击败了98.29%的用户

内存消耗:22.2 MB, 在所有 C++ 提交中击败了83.77%的用户

通过测试用例:24 / 24

正在加载今日诗词....