Leetcode 230.二叉搜尋樹第k小的數
阿新 • • 發佈:2018-12-31
二叉搜尋樹第k小的數
給定一個二叉搜尋樹,編寫一個函式 kthSmallest 來查詢其中第 k 個最小的元素。
說明:
你可以假設 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 publicint 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 }