劍指offer 從上到下列印二叉樹(Python)

2021-08-16 11:10:46 字數 2057 閱讀 4984

從上往下列印出二叉樹的每個節點,同層節點從左至右列印。

條件反射地想通過遞迴解決,結果硬是沒有找到合適的解決思路,也許遞迴的方式不是很適合這種型別的題目吧~

利用佇列的先進先出(fifo)特性解決。每從佇列頭部獲取乙個節點,就將該節點的左右子節點存入佇列的尾部。如此往復,直至隊列為空。這篇部落格內的和**很形象的展示了程式執行過程中佇列內值的變化過程:

二叉樹樣例:

列印二叉樹每層節點時佇列內值的變化:

帶測試的python**:

class

solution:

#從上往下列印出二叉樹的每個節點,同層節點從左至右列印

defprintfromtoptobottom

(self, root):

array =

result =

if root == none:

return result

while array:

newnode = array.pop(0)

if newnode.left != none:

if newnode.right != none:

return result

# 給定二叉樹的前序遍歷和中序遍歷,獲得該二叉樹

defgetbstwithpretin

(self, pre, tin):

if len(pre)==0 | len(tin)==0:

return

none

root = treenode(pre[0])

for order,item in enumerate(tin):

if root .val == item:

root.left = self.getbstwithpretin(pre[1:order+1], tin[:order])

root.right = self.getbstwithpretin(pre[order+1:], tin[order+1:])

return root

class

treenode:

def__init__

(self, x):

self.left = none

self.right = none

self.val = x

if __name__ == '__main__':

flag = "printtreenode"

solution = solution()

preorder_seq = [1, 2, 4, 7, 3, 5, 6, 8]

middleorder_seq = [4, 7, 2, 1, 5, 3, 8, 6]

treeroot1 = solution.getbstwithpretin(preorder_seq, middleorder_seq)

if flag == "printtreenode":

newarray = solution.printfromtoptobottom(treeroot1)

print(newarray)

順序列印二叉樹節點:初級版本(當前頁)

順序列印二叉樹節點:中級版本

順序列印二叉樹節點:高階版本

劍指Offer 從上到下列印二叉樹

2.題目 2 3.題目 3 不分行從上到下列印二叉樹。從上到下列印出二叉樹的每個結點,同一層的結點按照從左到右的順序列印。輸入 8 6 10 57 911輸出 8610 57911這個其實就是層序遍歷。每次列印乙個結點的時候,若該結點有子結點,則讓該結點的子結點放到乙個佇列的末尾。接下來到佇列的首部...

劍指offer 從上到下列印二叉樹

普通的列印二叉樹很簡單,使用佇列就可以解決。但是我做的這個題目是要將每一層的節點都存起來,而且不同層之間是分開儲存的。其中有個問題就是我們如何去判斷某一層是遍歷完了,然後要到下一層了呢。我們可以這樣解決,記住每層的個數,這樣遍歷上一層時我們知道上一層個數了就不會遍歷下一層的節點 而遍歷過程中也要把子...

劍指Offer系列32 1 從上到下列印二叉樹

從上到下列印出二叉樹的每個節點,同一層的節點按照從左到右的順序列印。例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回 3,9,20,15,7 python definition for a binary tree node.class treenode de...