我是靠谱客的博主 眯眯眼嚓茶,最近开发中收集的这篇文章主要介绍【剑指Offer-Java】二叉搜索树的第k个结点题目描述思路实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

二叉搜索树的第k个结点

  • 题目描述
  • 思路
  • 实现

题目描述

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

思路

中序遍历二叉搜索树得到的就是有序序列,再找到第k个即可

实现

递归实现

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

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

    }

}
*/
public class Solution {
    int cnt=0;  //记录遍历元素的个数
    TreeNode KthNode(TreeNode pRoot, int k)
    {
        //中序遍历
        //递归出口
        if(pRoot==null || k<=0) return null;
        
        //当前遍历到的结点node
        
        //遍历左子树:递归:在左子树找到第k个了就返回第k个结点,否则就是null
        TreeNode node=KthNode(pRoot.left,k);
        //判断左子树是否满足k个,node不为null,说明找到第k个了
        if(node!=null){
            return node;
        }
        
        //若node为null,说明左子树没有k个,继续根结点
        cnt++;  //遍历完根结点,cnt+1
        if(cnt==k){  //个数正好为k:根就是第k个
            return pRoot;
        }
        
        //遍历完根也不够k,就继续右子树(类似左子树)
        node=KthNode(pRoot.right,k);
        if(node!=null){
            return node;
        }
        return null;   //遍历完整树都没找到第K个结点
    }
}

非递归(栈实现)

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

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

    }

}
*/
import java.util.Stack;
public class Solution {
    //使用栈实现非递归中序遍历
    TreeNode KthNode(TreeNode pRoot, int k)
    {
        if(pRoot==null || k==0) return null;
        int count=0;  //当前遍历结点数(计数器)
        Stack<TreeNode> stack=new Stack<>();
        while(pRoot!=null || !stack.isEmpty()){
            while(pRoot!=null){
                stack.push(pRoot);
                pRoot=pRoot.left;
            }
            pRoot=stack.pop();
            count++;
            //如果当前遍历结点数到达k,就输出该结点
            if(count==k){
                return pRoot;
            }
            //继续遍历右子树
            pRoot=pRoot.right;
        }
        return null;    //找不到第k个时
    }
}

最后

以上就是眯眯眼嚓茶为你收集整理的【剑指Offer-Java】二叉搜索树的第k个结点题目描述思路实现的全部内容,希望文章能够帮你解决【剑指Offer-Java】二叉搜索树的第k个结点题目描述思路实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部