1. 程式人生 > >Leetcode 230.二叉搜尋樹第k小的數

Leetcode 230.二叉搜尋樹第k小的數

二叉搜尋樹第k小的數

給定一個二叉搜尋樹,編寫一個函式 kthSmallest 來查詢其中第 個最小的元素。

說明:
你可以假設 k 總是有效的,1 ≤ k ≤ 二叉搜尋樹元素個數。

示例 1:

輸入: root = [3,1,4,null,2], k = 1

3

/ \

1 4

\

  2

輸出: 1

示例 2:

輸入: root = [5,3,6,2,4,null,null,1], k = 3

5

/ \

3 6

/ \

2 4

/

1

輸出: 3

進階:
如果二叉搜尋樹經常被修改(插入/刪除操作)並且你需要頻繁地查詢第 k 小的值,你將如何優化 kthSmallest 函式?

 

提示讓用BST的性質來,那就是BST數值大小是:左<根<右,用中序遍歷所有的節點就會得到一個有序陣列,如果只求第k小的數,還可以用一個計數器記錄已經遍歷的節點數,只遍歷到第k個節點返回即可。

 

 1 class Solution {
 2 
 3     List<Integer> list=new ArrayList<Integer>();
 4     public
int kthSmallest(TreeNode root, int k) { 5 IBTS(root); 6 return list.get(k-1); 7 } 8 9 public void IBTS(TreeNode root){ 10 if(root==null) return; 11 IBTS(root.left); 12 list.add(root.val); 13 IBTS((root.right)); 14 } 15 }