美文网首页剑指 Offer Java版
剑指Offer Java版 面试题54:二叉搜索树的第k大节点

剑指Offer Java版 面试题54:二叉搜索树的第k大节点

作者: 孙强Jimmy | 来源:发表于2019-08-04 15:26 被阅读1次

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

    练习地址

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

    参考答案

    /*
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
        }
    }
    */
    public class Solution {
        private int mIndex;
        
        TreeNode KthNode(TreeNode pRoot, int k) {
            if (pRoot == null || k < 1) {
                return null;
            }
            mIndex = 0;
            return search(pRoot, k);
        }
    
        private TreeNode search(TreeNode node, int k) {
            if (node.left != null) {
                TreeNode left = search(node.left, k);
                if (left != null) {
                    return left;
                }
            }
            if (++mIndex == k) {
                return node;
            }
            if (node.right != null) {
                TreeNode right = search(node.right, k);
                if (right != null) {
                    return right;
                }
            }
            return null;
        }
    }
    

    复杂度分析

    • 时间复杂度:O(n)。
    • 空间复杂度:O(logn)。

    👉剑指Offer Java版目录
    👉剑指Offer Java版专题

    相关文章

      网友评论

        本文标题:剑指Offer Java版 面试题54:二叉搜索树的第k大节点

        本文链接:https://www.haomeiwen.com/subject/dmlydctx.html