70. 二叉搜索树的第k个结点
二分搜索 递归 分治
原题链接
给定一棵二叉搜索树,请找出其中的第 k 小的结点。
你可以假设树和 k 都存在,并且 1≤k≤ 树的总结点数。
数据范围
树中节点数量 [1,500]。
代码案例:
题解
要保证所有的dfs函数都公用一个k 所以这里面的k直接定义成全局变量
注意:不是 k == 0 找到答案时 就马上终止程序。 如果不加 if (k>0)的 剪枝优化,只有把整棵树遍历完,才会终止程序。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
TreeNode ans ;
int k ;
public TreeNode kthNode(TreeNode root, int k) {
this.k = k ;
dfs(root );
return ans;
}
public void dfs(TreeNode root ){
if(k == 0 || root == null ) return ;
dfs(root.left );
k--;
if(k == 0 ) ans = root;
else dfs(root.right );
}
}