剑指Offer对答如流系列 - 二叉搜索树的第k个结点

Posted jefferychenxiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer对答如流系列 - 二叉搜索树的第k个结点相关的知识,希望对你有一定的参考价值。

面试题54:二叉搜索树的第k个结点

题目描述

给定一棵二叉搜索树,请找出其中的第k小的结点。

例如,图中的二叉搜索树,按节点值大小顺序,第三大节点的值是4.
技术图片

二叉搜索树的节点定义

    public class Node {
        int val = 0;
        Node left = null;
        Node right = null;

        public Node(int val) {
            this.val = val;
        }
    }

问题分析

二叉搜索树中序遍历的结果是顺序的。我们可以设置一个全局变量index,对二叉搜索树进行中序遍历时,每遍历一个结点,index++,当index=k时,该结点即为所求结点。

问题解答

    private int index=0;

    Node KthNode(Node pRoot, int k){
        Node pNode = null;
        if(pRoot==null || k<=0) {
            return pNode;
        }
        pNode = getKthNode(pRoot,k);
        return pNode;
    }

    private Node getKthNode(Node pRoot, int k){
        Node kthNode=null;

        if(pRoot.left!=null) {
            kthNode=getKthNode(pRoot.left,k);
        }
        
        if(kthNode==null){
            index++;
            if(k==index) {
                kthNode = pRoot;
            }
        }

        if(kthNode==null && pRoot.right!=null) {
            kthNode=getKthNode(pRoot.right,k);
        }
        
        return kthNode;
    }

以上是关于剑指Offer对答如流系列 - 二叉搜索树的第k个结点的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer对答如流系列 - 二叉搜索树的后序遍历序列

剑指offer 62.二叉搜索树的第k个结点

《剑指offer》:[63]二叉搜索树的第K个结点

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

剑指Offer打卡day43——Acwing 70. 二叉搜索树的第k个结点

二叉搜索树的第k个结点(剑指offer)