百度面試題之二叉樹層次遍歷 從上到下,從下到上

2021-07-23 00:24:55 字數 2178 閱讀 9118

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 從上往下列印二叉樹

不管是廣度優先遍歷乙個有向圖還是一棵樹,都要用到佇列,第一步把起始結點 對樹而言是根結點 放入到佇列中,接下來每一次從佇列頭部提取出乙個結點,遍歷這個結點之後把從它能到達的結點 對樹而言是子結點 都依次放入到佇列,我們重複這個遍歷過程,直到佇列中的結點全部被遍歷為止 從上往下列印出二叉樹的每個結點,...