230. Kth Smallest Element in a BST

Medium
我自己用的簡(jiǎn)單的Recursive inOrder traversal做. 這個(gè)方法是O(N)的,因?yàn)楸闅v了整棵樹(shù),可以稍加改動(dòng)改進(jìn)為O(k),只需要遍歷到k個(gè)就停.

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public int kthSmallest(TreeNode root, int k) {
        List<TreeNode> inOrderRes = new ArrayList<>();
        inOrder(root, inOrderRes);
        return inOrderRes.get(k - 1).val;
    }
    
    private void inOrder(TreeNode root, List<TreeNode> inOrderRes){
        if (root == null){
            return;
        }
        inOrder(root.left, inOrderRes);
        inOrderRes.add(root);
        inOrder(root.right, inOrderRes);
    }
}

可以改進(jìn)為O(K)

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public int kthSmallest(TreeNode root, int k) {
        List<TreeNode> inOrderRes = new ArrayList<>();
        inOrder(root, inOrderRes, k);
        return inOrderRes.get(k - 1).val;
    }
    
    private void inOrder(TreeNode root, List<TreeNode> inOrderRes, int k){
        if (root == null || inOrderRes.size() >= k){
            return;
        }
        inOrder(root.left, inOrderRes, k);
        inOrderRes.add(root);
        inOrder(root.right, inOrderRes, k);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容