题目
某公司组织架构以二叉搜索树形式记录,节点值为处于该职位的员工编号。请返回第 cnt 大的员工编号。
示例 1:
输入:root = [7, 3, 9, 1, 5], cnt = 2 7 / \ 3 9 / \ 1 5 输出:7
示例 2:
输入: root = [10, 5, 15, 2, 7, null, 20, 1, null, 6, 8], cnt = 4 10 / \ 5 15 / \ \ 2 7 20 / / \ 1 6 8 输出: 8
提示:
1 ≤ cnt ≤ 二叉搜索树元素个数
解法
- 对二叉搜索树来说,中序遍历可得有序序列
- 题目要求寻找第 cnt 大的节点,可以采用先传入右子树的中序遍历
- 设置标志位,一旦寻找到目标节点立刻返回(剪枝)
class Solution {
public:
int count=0, n=0, ans=0;
bool haveFound=false;
void dfs(TreeNode* root){
if(haveFound) return;
if(!root) return;
dfs(root->right);
++n;
if(n==count){
ans=root->val;
haveFound=true;
}
dfs(root->left);
}
int findTargetNode(TreeNode* root, int cnt) {
count = cnt;
dfs(root);
return ans;
}
};