【剑指offer】二叉搜索树的第k个结点

二叉搜索树的第k个结点

http://www.nowcoder.com/questionTerminal/ef068f602dde4d28aab2b210e859150a

题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
1、思路分析
二叉搜索树的中序遍历就是结点值的递增排列,因此只需找到中序遍历的第k个结点而已。采用递归的办法,碰到空结点返回,否则一直向左搜索,同时记录已经遍历的结点个数,如果等于k,返回当前结点,否则继续向右遍历。
2、代码

public class Solution {
    int count = 0; // 利用二叉树的特点,需要记录已经遍历的结点个数
    TreeNode result = null;
    void help(TreeNode root,int k) {
        if(root == null) {
            return;
        }
        help(root.left,k);
        if(++count == k) {
            result = root;
            return;
        }
        else {
            help(root.right,k);
        }
    }
    TreeNode KthNode(TreeNode pRoot, int k) {
        if(pRoot == null || k < 0) {
            return null;
        }
        help(pRoot,k);
        return result;
    }
}
全部评论

相关推荐

找工作的图奇:你想找什么岗呢?没看明白
点赞 评论 收藏
分享
不懂!!!:感觉你的项目描述太简单了,建议使用star描述法优化提炼一下,就是使用什么技术或方案解决了什么问题,有什么效果或成果,例如:对axios进行了二次封装,实现了请求的统一管理、错误的集中处理以及接口调用的简化,显著提高了开发效率和代码维护性,使用canvas技术实现了路线绘制功能,通过定义路径绘制函数和动态更新机制,满足了简化的导航可视化需求,提升了用户体验。像什么是使用其他组件库,基本功能描述就最好不要写到项目成果里面去了,加油
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务