萌新刷題(九)二叉查找樹迭代器
題目
設計實現一個帶有下列屬性的二叉查找樹的迭代器:
- 元素按照遞增的順序被訪問(比如中序遍歷)
- next()和hasNext()的詢問操作要求均攤時間複雜度是O(1)
樣例
對於下列二叉查找樹,使用迭代器進行中序遍歷的結果為 [1, 6, 10, 11, 12]
10n / n1 11n n 6 12n
挑戰
額外空間複雜度是O(h),其中h是這棵樹的高度
Super Star:使用O(1)的額外空間複雜度
鏈接 二叉查找樹迭代器思路
先看看什麼是中序遍歷
維護一個棧,從根節點開始,每次迭代地將根節點的左孩子壓入棧,直到左孩子為空為止。
調用next()方法時,彈出棧頂,如果被彈出的元素擁有右孩子,則以右孩子為根,將其左孩子迭代壓棧。
另請參閱:My solutions in 3 languages with Stack
代碼
Python
class BSTIterator:n #@param root: The root of binary tree.n def __init__(self, root):n self.stack = []n self.curt = rootnn #@return: True if there has next node, or falsen def hasNext(self):n return self.curt is not None or len(self.stack) > 0nn #@return: return next noden def next(self):n while self.curt is not None:n self.stack.append(self.curt)n self.curt = self.curt.leftn n self.curt = self.stack.pop()n nxt = self.curtn self.curt = self.curt.rightn return nxtn
leetcode 上也有Binary Search Tree Iterator
廣東校花>..< 廣東高校十大頂級校花,顏值爆表!
推薦閱讀:
※未來是屬於掌握演算法的公司
※多邊形自交的處理?
※成功人士從不刷Leetcode(2)
※FreeCodeCamp 高級演算法題 - 數組的對稱差