题解 | #二叉搜索树的第k个结点#

二叉搜索树的第k个结点

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

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
要充分利用二叉搜索树+中序遍历顺序 = 从小到大排序这么一个特点。
这里的遍历操作就是把count值加1再去和k比,为什么要加1呢?因为count模拟的是数组的下标,下标加1在会等于“第几个”。比如2+1=第3小的数。而K表示的就是第几小的数。
在理解中序遍历的时候,一定要自己手画几个栈多去模拟一下过程,这样才能理解为什么count<k要去递归它的右子树(递归可以理解为一种压栈的过程),return可以理解为什么都不做直接弹栈。而正常弹栈是有操作的,就是count加1并且和K进行比较,最终目的是找到和K一样的count+1.并且把root返回。所以我们也可以知道,虽然压栈的左右子树,**但是我们需要左右子树为空才开始正常弹栈,那么遍历的一定是根节点**。
public class Solution {
    int count = 0;//维护一个索引
    TreeNode result = null;//初始化一个结果节点
    TreeNode KthNode(TreeNode pRoot, int k) {
        inOrder(pRoot,k);
        return result;
    }
    void inOrder(TreeNode root,int k){
        if(root == null)return;
        inOrder(root.left,k);
        count++;//下标值需要加1,这个时候可以假设已经排好序了
        if(count == k)result = root;
        else if(count > k)return;
        else{
            inOrder(root.right,k);
        }
    }


}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 16:22
点赞 评论 收藏
分享
05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
05-09 13:22
门头沟学院 Java
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务