lintcode練習 86 二叉查詢樹迭代器

2021-08-27 13:58:12 字數 1342 閱讀 9956

設計實現乙個帶有下列屬性的二叉查詢樹的迭代器:

對於下列二叉查詢樹,使用迭代器進行中序遍歷的結果為[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型別的函式來判斷二叉樹是否等價...