LintCode: Binary Search Tree Iterator

與二叉樹的中序遍歷(非遞歸)相似, 以一個數組來存儲stand-by的節點, 以root和stack來判定是否hasNext(), 當hasNext()為True的時候, 如果root為None, 則從stack中提取下一個節點, 如果root的左子樹不為空, 則1, 將左兒子保存, 2, 將當前節點的左兒子設置為None, 3, 將當前節點存入stack中, 4, 將當前節點的左兒子設為當前節點; 如果root的左子樹為空, 則將root保存準備返還, 然后如果右兒子不為空, 將root節點設為右兒子, 然后返還保存的root節點, 如果右兒子為空, 則返還root的同時, 將root設置為None

"""
Definition of TreeNode:
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None

Example of iterate a tree:
iterator = BSTIterator(root)
while iterator.hasNext():
    node = iterator.next()
    do something for node 
"""
class BSTIterator:
    #@param root: The root of binary tree.
    def __init__(self, root):
        # write your code here
        self.stack = []
        self.head = root

    #@return: True if there has next node, or false
    def hasNext(self):
        # write your code here
        if self.head or self.stack:
            return True
        return False

    #@return: return next node
    def next(self):
        #write your code here
        if not self.head:
            self.head = self.stack.pop()
        else:
            while self.head.left:
                t = self.head.left
                self.head.left = None
                self.stack.append(self.head)
                self.head = t
            else:
                ret = self.head
                if self.head.right:
                    self.head = self.head.right
                else:
                    if self.stack:
                        self.head = self.stack.pop()
                    else:
                        self.head = None
                return ret
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,769評論 0 33
  • 編譯環境:python v3.5.0, mac osx 10.11.4 前述內容: 線性表 隊列 堆棧 線性結構...
    擲骰子的求閱讀 2,497評論 1 7
  • 生活最終還是會回到平淡
    wwwwwhy閱讀 102評論 0 0
  • 贛州又有一家新的品茶好去處!大天元茶莊(微信號“teazhi”)正式營業。 喝茶熱線:15007099100 賴山...
    賴山河閱讀 497評論 0 0
  • 我來世界上的時候,我第一次哭了 身邊是滿心歡喜的親人們,迎接我的到來 我睜眼看到黎明的曙光 閉眼,是夜的浸染 伸手...
    夏墨跡q閱讀 232評論 0 0