class
node
(object):
def__init__
(self, v, left=none, right=none):
self.value = v
self.left = left
self.right = right
# 層次遍歷入口函式
deflevel_tranverse_iterate
(node):
ifnot node:
return
0 depth = depth(node)
print
"depth:", depth
for i in range(1, depth+1):
print_node_at_level(node, i)
print
# 計算樹高
defdepth
(node):
ifnot node:
return
0return max(depth(node.left)+1,depth(node.right)+1)
# 當level=1時才輸出結點
defprint_node_at_level
(node, level):
ifnot node or level < 1:
return
0if level == 1:
print node.value,
return
0 print_node_at_level(node.left, level-1)
print_node_at_level(node.right, level-1)
node = node(1, node(3, node(7, node(0)), node(6)), node(2, node(5), node(4)))
level_tranverse_iterate(node)
# output:
depth: 413
2765
40
def
level_tranverse_noniterate
(node):
stack = [node]
while stack:
node = stack.pop(0)
print node.value
if node.left:
if node.right:
node = node(1, node(3, node(7, node(0)), node(6)), node(2, node(5), node(4)))
level_tranverse_noniterate(node)
output:13
2765
40
就是將樹
13 2
7 6 5 4
0列印為:
0 7 6 5 4 3 2 1
主要是要考慮每層的元素要分隔開,不然會亂。
# python 2.7
deffrom_bottom_to_top
(node):
ifnot node:
return
0 vect = [node]
cur = 0
last = 1
while cur < len(vect):
last = len(vect)
print
"每層個數"+str(last-cur)
# 每層的結點都判斷是否有左右子結點
# 用cur來計數,cur==last-1即當前層的結點全部判斷完了
#然後cur += 1,如果cur==len(vect),說明下一層沒有新結點加入,層次遍歷結束
while cur < last - 1:
if vect[cur].right:
if vect[cur].left:
cur += 1
cur+= 1
# 按層輸出
for i in range(len(vect)):
if vect[i]:
print vect[i].value,
else:
print
層次遍歷二叉樹 微軟面試題
這也是網路流傳的microsoft的面試題目之一 怎樣從頂部開始逐層列印二叉樹結點資料?請程式設計 這個題目實際上很簡單,採用佇列的方式很容易可以實現 void hiberarchyretriveatree treenode root,void visit treenode queuetree tr...
面試題 分層遍歷二叉樹
程式設計之美上的題目。問題1 給定一棵二叉樹,要求按分層遍歷該二叉樹,即從上到下按層次訪問該二叉樹 每一行將單輸出一行 每一層要求訪問的順序為從左向右,並將節點依次編號。問題2 寫乙個函式,列印二叉樹中某層次的節點 從左向右 其中根結點為第1層。include iostream include qu...
面試題23 從上往下列印二叉樹
不管是廣度優先遍歷乙個有向圖還是一棵樹,都要用到佇列,第一步把起始結點 對樹而言是根結點 放入到佇列中,接下來每一次從佇列頭部提取出乙個結點,遍歷這個結點之後把從它能到達的結點 對樹而言是子結點 都依次放入到佇列,我們重複這個遍歷過程,直到佇列中的結點全部被遍歷為止 從上往下列印出二叉樹的每個結點,...