58.二叉搜索树的第k个结点
给定一棵二叉搜索树,请找出其中的第 k 小的结点。
你可以假设树和 k 都存在,并且 1≤k≤ 树的总结点数。
数据范围:
树中节点数量 [1,500]。
样例:
输入:root = [2, 1, 3, null, null, null, null] ,k = 3
输出:3
代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
//保存结果的结点
TreeNode res = null;
//计数器,记录当前是第几个节点
int n = 0;
public TreeNode kthNode(TreeNode root, int k) {
//中序遍历二叉搜索树
dfs(root,k);
//返回结果
return res;
}
public void dfs(TreeNode root,int k){
//递归终止条件:当前节点为空
if(root == null)return;
//先遍历左子树
dfs(root.left,k);
//每次访问节点时计数器+1
//当计数器为k时,当前节点即为树中第k小的节点
if(++n==k)res = root;
//遍历右子树
dfs(root.right,k);
}
}