剑指 Offer Java版

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

2019-08-04  本文已影响1人  孙强Jimmy

题目:给定一棵二叉搜索树,请找出其中的第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;
    }
}

复杂度分析

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

上一篇下一篇

猜你喜欢

热点阅读