剑指offer 70. 二叉搜索树的第k个结点-java

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 );
    }
}
posted @   依嘫  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示