1. 程式人生 > >LeetCode-230 kth smallest element in a bst 二叉搜尋樹中第K小的元素

LeetCode-230 kth smallest element in a bst 二叉搜尋樹中第K小的元素

題目連結

https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst/

題意

中文題,對於二叉搜尋樹而言,找其中的第K小的數

題解

        很有趣的題,但是很簡單,實際上就是對樹的中序遍歷,關於第K小,因為是二叉搜尋樹,所以最左邊的就是最小的,那麼中序遍歷的情況下,第一次回溯到中序就是最小的一個節點,從該節點開始判定index累加,當index == K的時候,該節點就是第K小了。主要還是考察了二叉搜尋樹的概念吧。

        注意剪枝,適當剪枝能顯著提升速度,例如找到第K小以後設定flag,直接結束遍歷。

Java 程式碼

class Solution {
    public static int index;
    public static int ans;
    public static int flag;
    public static int now;

    public static void solve(TreeNode root){
        if(root.left != null){
            solve(root.left);
        }
        now++;
        if(flag == 1) return;
        if(now == index){
            flag = 1;
            ans = root.val;
            return;
        }
        if(root.right != null){
            solve(root.right);
        }

    }

    public int kthSmallest(TreeNode root, int k) {
        index = k;
        flag = 0;
        now = 0;
        solve(root);
        return ans;
    }
}