`

Leetcode - Kth Smallest Element in BST

 
阅读更多
[分析]
思路1: 递归中序遍历,返回中序遍历中的第k个数。
思路2: 迭代方式实现的中序遍历,遍历到第k个数即返回。
思路3: 如果可以修改数结构,增加一个leftCount属性,记录当前节点左子树节点个数。

[ref]
http://bookshadow.com/weblog/2015/07/02/leetcode-kth-smallest-element-bst/

public class Solution {
    // Method 1
    public int kthSmallest1(TreeNode root, int k) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        inorder(root, list);
        return list.get(k - 1);
    }
    public void inorder(TreeNode root, ArrayList<Integer> list) {
        if (root == null) return;
        inorder(root.left, list);
        list.add(root.val);
        inorder(root.right, list);
    }
    
    // Method 2
    public int kthSmallest(TreeNode root, int k) {
        LinkedList<TreeNode> stack = new LinkedList<TreeNode>();
        TreeNode curr = root;
        int n = 0;
        while (curr != null || !stack.isEmpty()) {
            if (curr != null) {
                stack.push(curr);
                curr = curr.left;
            } else {
                curr = stack.pop();
                n++;
                if (n == k)
                    return curr.val;
                // if (curr.right != null) // leads to timeout
                curr = curr.right;
            }
        }
        return 0;
     }
     
    // Method 3
    public int kthSmallest(TreeNode root, int k) {
        while (root != null) {
            if (root.leftCount == k - 1)
                return root.val;
            else if (root.leftCount >= k)
                root = root.left;
            else {
                root = root.right;
                k -= root.leftCount + 1;
            }
        }
        return 0;
    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics