58.二叉搜索树的第k个结点

给定一棵二叉搜索树,请找出其中的第 k 小的结点。

你可以假设树和 k 都存在,并且 1≤k≤ 树的总结点数。

数据范围:

树中节点数量 [1,500]。

样例:

输入:root = [2, 1, 3, null, null, null, null] ,k = 3
image
输出: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);
    }
}
posted @ 2025-05-30 13:11  回忆、少年  阅读(5)  评论(0)    收藏  举报