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

2021-09-25 10:58:36 字數 1576 閱讀 8148

從上到下按層列印二叉樹,同一層的節點按照從左到右

的順序列印,每一層列印到第一行,例如本題中上乙個問題的二叉樹

輸出形式會是:

86 10

5 7 9 11

這道題和前面一道題十分類似,也可以用乙個佇列來儲存要列印的節點。

為了把二叉樹的每一行單獨列印到一行裡,我們需要兩個變數:

乙個變數表示當前層中還沒有列印的節點數;另乙個變數表示下一層節點數。

class

treenode

:def

__init__

(self, x)

: self.val = x

self.left =

none

self.right =

none

class

solution

:def

print

(self, root):if

not root:

return

none

queue =

[root]

tobeprinted =

1# 表示當前層中還沒有列印的節點數

nextlevel =

0# 表示下一層的節點數

while

len(queue)

>0:

currentroot = queue.pop(0)

# 按空格隔開,不換行輸出

print

(currentroot.val, end=

" ")

if currentroot.left:

nextlevel +=

1if currentroot.right:

nextlevel +=

1 tobeprinted -=

1# 如果當前層未列印的節點數為0,就跳轉到下一層

if tobeprinted ==0:

# 如果下一層沒有東西了,就不再執行程式了

if nextlevel ==0:

break

print

("\n"

) tobeprinted = nextlevel

nextlevel =

0pnode1 = treenode(8)

pnode2 = treenode(6)

pnode3 = treenode(10)

pnode4 = treenode(5)

pnode5 = treenode(7)

pnode6 = treenode(9)

pnode7 = treenode(11)

pnode1.left = pnode2

pnode1.right = pnode3

pnode2.left = pnode4

pnode2.right = pnode5

pnode3.left = pnode6

pnode3.right = pnode7

s = solution(

)s.print(pnode1)

劍指offer32 1 不分行從上往下列印二叉樹

從上往下列印出二叉樹的每個結點,同一層的結點按照從左到右的順序列印。樣例 輸入如下圖所示二叉樹 8,12,2,null,null,6,null,4,null,null,null 8 12 2 6 4輸出 8,12,2,6,4 思路 用乙個佇列存放樹節點,層次遍歷訪問所有結點,並且儲存其數值。acwi...

劍指offer 矩形覆蓋 python

我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?假設是乙個2 8的大矩形有f 8 種放的方法,當第乙個豎著放,那後面就有f 7 種放的方法 當第乙份橫著放,而下面那個空間也必須橫著放,剩下的就有f 6 種放的方法,那就總...

python 醜數 劍指offer

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。思路 最直接的暴力解法是從1開始依次判斷數字是否為醜數,直到達到要求的醜數個數。當然這種方法肯定是會tle的,所以我們分析...