設計實現乙個帶有下列屬性的二叉查詢樹的迭代器:
對於下列二叉查詢樹,使用迭代器進行中序遍歷的結果為[1, 6, 10, 11, 12]
10
/ \
1 11
\ \
6 12
額外空間複雜度是o(h),其中h是這棵樹的高度
super star:使用o(1)的額外空間複雜度
"""
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):
# do intialization if necessary
#維護乙個棧
self.stack =
self.cur = root
"""@return: true if there has next node, or false
"""def hasnext(self, ):
# write your code here
return self.cur is not none or len(self.stack) > 0
"""@return: return next node
"""def next(self, ):
# write your code here
#如果當前結點不為空,就新增結點,並尋找最左結點
while self.cur is not none:
self.cur = self.cur.left
#彈出最新加入的,也就是當前最小的值
self.cur = self.stack.pop()
nxt = self.cur
#然後將當前結點賦值為右結點,方便下一輪判斷
self.cur = self.cur.right
return nxt
lintcode練習 155 二叉樹的最小深度
二叉樹的最小深度為根節點到最近葉子節點的距離。是樣例 給出一棵如下的二叉樹 2 3 4 5 這個二叉樹的最小深度為 2 解題思路 利用了二叉樹的層次遍歷的思想,在每一層的遍歷中都判斷一下是否有葉子結點,如果有葉子結點,則返回該層深度。definition of treenode class tree...
lintcode練習 453 將二叉樹拆成鍊錶
將一棵二叉樹按照前序遍歷拆解成為乙個假鍊錶。所謂的假煉表是說,用二叉樹的 right 指標,來表示鍊錶中的 next 指標。1 1 2 2 5 3 3 4 6 4 5 6不使用額外的空間耗費。不要忘記將左兒子標記為 null,否則你可能會得到空間溢位或是時間溢位。分析 本題採用遞迴的方法解決,關鍵是...
LintCode 等價二叉樹
題目描述 檢查兩棵二叉樹是否等價。等價的意思是說,首先兩棵二叉樹必須擁有相同的結構,並且每個對應位置上的節點上的數都相等。樣例 1 1 2 2 and 2 2 4 4 就是兩棵等價的二叉樹。1 1 2 3 and 2 3 4 4就不是等價的。做題思路 本題給出的bool型別的函式來判斷二叉樹是否等價...