zoukankan      html  css  js  c++  java
  • 剑指Offer62:二叉搜索树的第k个结点(Java)

    参考“Echos”的牛客解答:https://www.nowcoder.com/questionTerminal/ef068f602dde4d28aab2b210e859150a?f=discussion

    思路分析:

    首先了解搜索二叉树在中序遍历下的结果是有序的。设一个全局变量num记录次数,每当中序遍历到一个节点时,num++。当num等于k时,返回node即结果。
    难在递归上

    题目描述

    给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。

    参考答主Echos的代码:

    public class Solution {
        int num=1;
        TreeNode KthNode(TreeNode pRoot, int k)
        {    
            if(pRoot==null||k<1){
                return null;
            }else{
                TreeNode left=KthNode(pRoot.left,k);
                if(left!=null){//为什么会判断是否为null,是因为只有当num等于k时才会返回结点,其他情况只返回null,因为第k小只有一个。
                    return left;
                }
                if(num==k){
                    return pRoot;
                }
                num++;
                TreeNode right=KthNode(pRoot.right,k);
                if(right!=null){
                    return right;
                }
            }
            return null;//num不等于k时,只返回null。 
        }
    }
    

    自己思路的代码:

    我的代码效率不如上面的,只有全部遍历结束了才返回结果。

    public class Solution {
        int num=1;
        TreeNode res=null;//用来保存唯一的结果
        TreeNode KthNode(TreeNode pRoot, int k)
        {    
            if(pRoot==null||k<1){
                return null;
            }
            TreeNode left=KthNode(pRoot.left,k);
            if(num==k){
                res= pRoot;
            }
            num++;
            TreeNode right=KthNode(pRoot.right,k);
            return res;//找到第k小之前,谁调用我都返回null,找到第k小之后,谁调用我都返回第k小结点
        }
    }
    
  • 相关阅读:
    死锁篇
    java线程池
    sql server 多行数据指定字符串拼接
    动态提交 表格
    ABP
    DDD学习
    sql 语句插入数据返回id
    Post方式提交,通过上下文HttpContext,Request[""]获取
    JQ的过滤隐藏
    sql 查询有多少行
  • 原文地址:https://www.cnblogs.com/dongmm031/p/12342282.html
Copyright © 2011-2022 走看看