摘要:中序遍歷復雜度時間空間思路因為左節點小于根節點小于右節點,二叉搜索樹的一個特性就是中序遍歷的結果就是樹內節點從小到大順序輸出的結果。這里采用迭代形式,我們就可以在找到第小節點時馬上退出。這樣我們就可以用二叉樹搜索的方法來解決這個問題了。
Kth Smallest Element in a BST
中序遍歷 復雜度Given a binary search tree, write a function kthSmallest to find the kth smallest element in it.
Note: You may assume k is always valid, 1 ≤ k ≤ BST"s total elements.
Follow up: What if the BST is modified (insert/delete operations) often and you need to find the kth smallest frequently? How would you optimize the kthSmallest routine?
Hint:
Try to utilize the property of a BST. What if you could modify the BST node"s structure? The optimal runtime complexity is O(height of BST).
時間 O(N) 空間 O(N)
思路因為左節點小于根節點小于右節點,二叉搜索樹的一個特性就是中序遍歷的結果就是樹內節點從小到大順序輸出的結果。這里采用迭代形式,我們就可以在找到第k小節點時馬上退出。中序遍歷詳見Binary Tree Traversal。
代碼public class Solution { public int kthSmallest(TreeNode root, int k) { Stack后續 Follow Ups = new Stack (); while(root!=null){ s.push(root); root = root.left; } while(!s.isEmpty()){ TreeNode curr = s.pop(); k--; if(k == 0) return curr.val; if(curr.right != null){ curr = curr.right; while(curr!=null){ s.push(curr); curr = curr.left; } } } return 0; } }
這題的難點其實在于Follow Up:如果我們頻繁的操作該樹,并且頻繁的調用kth函數,有什么優化方法使時間復雜度降低至O(h)?h是樹的高度。根據提示,我們可以在TreeNode中加入一個rank成員,這個變量記錄的是該節點的左子樹中節點的個數,其實就是有多少個節點比該節點小。這樣我們就可以用二叉樹搜索的方法來解決這個問題了。這個添加rank的操作可以在建樹的時候一起完成。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64482.html
摘要:解題思路本題需要找的是第小的節點值,而二叉搜索樹的中序遍歷正好是數值從小到大排序的,那么這題就和中序遍歷一個情況。 Kth Smallest Element in a BSTGiven a binary search tree, write a function kthSmallest to find the kth smallest element in it. Note: You ...
摘要:題目鏈接二分找結果,按左邊數來分如果改下,加入的,那就可以在時間內找到結果了 Kth Smallest Element in a BST 題目鏈接:https://leetcode.com/problems... inorder traverse: public class Solution { public int kthSmallest(TreeNode root, int...
摘要:題目意思就是要一個個的返回當前的最小值。所以解法自然就是。我們需要找出被打亂的點并返回正確結果。然后將兩個不正確的點記錄下來,最后回原來正確的值。如果是葉子節點,或者只有一個子樹。思想來自于的代碼實現。 跳過總結請點這里:https://segmentfault.com/a/11... BST最明顯的特點就是root.left.val < root.val < root.right.v...
摘要:先放一行,或一列把堆頂的最小元素取出來,取次,如果該有下一行下一列的,放入堆中最小的個元素已經在上面的循環被完了,下一個堆頂元素就是 Problem Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth smallest element in...
摘要:因此我們可以采用部分元素堆排序即可。即我們每次只需要可能構成第個元素的值進行堆排序就可以了。 題目要求 Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth smallest element in the matrix. Note that...
閱讀 3527·2021-10-09 09:41
閱讀 2733·2021-10-08 10:18
閱讀 2164·2021-09-10 10:51
閱讀 2668·2021-09-10 10:50
閱讀 763·2021-09-09 09:33
閱讀 3369·2021-09-06 15:14
閱讀 3002·2019-08-30 11:06
閱讀 3231·2019-08-29 14:04