剑指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 );
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)