二叉樹問題 列印二叉樹的邊界節點

2021-08-04 15:11:54 字數 2345 閱讀 2709

問題

給定一棵二叉樹的頭節點,按照如下兩種標準分別實現二叉樹邊界節點的逆時針列印。

標準一:

1.頭節點為邊界節點

2.葉節點為邊界節點

3.如果節點在其所在層中的最左邊或最右邊,那麼也是邊界節點

標準二:

1.頭節點為邊界節點

2.葉節點為邊界節點

3.樹左邊界延伸下去的路徑為邊界節點

4.樹右邊界延伸下去的路徑為邊界節點

#標準一

defprintedge1

(root):

defgetheight

(root, height=0):

ifnot root:

return

0return max(getheight(root.left, height+1), getheight(root.right, height+1)) + 1

defgetmap

(root, i, map):

ifnot root:

return

if map[i][0] == none:

map[i][0] = root

map[i][1] = root

getmap(root.left, i+1, map)

getmap(root.right, i+1, map)

defprintleafnotinmap

(root, i, map):

ifnot root:

return

ifnot root.left and

not root.right and root != map[i][0] and \

root != map[i][1]:

print(root.val, end=' ')

printleafnotinmap(root.left, i+1, map)

printleafnotinmap(root.right, i+1, map)

ifnot root:

return

height = getheight(root)

map = [[none

for i in range(2)] for j in range(height)]

getmap(root, 0, map)

for i in range(len(map)):

print(map[i][0].val, end=' ')

printleafnotinmap(root, 0, map)

for i in range(len(map)-1, -1, -1):

if map[i][0] != map[i][1]:

print(map[i][1].val, end=' ')

#標準二

defprintedge2

(root):

defprintleft

(root, isprint):

ifnot root:

return

if isprint or (root.left == none

and root.right == none):

print(root.val, end=' ')

printleft(root.left, isprint)

printleft(root.right, bool(isprint and root.left == none))

defprintright

(root, isprint):

ifnot root:

return

printright(root.left, bool(isprint and root.right == none))

printright(root.right, isprint)

if isprint or (root.left == none

and root.right == none):

print(root.val, end=' ')

ifnot root:

return

print(root.val, end=' ')

if root.left and root.right:

printleft(root.left, true)

printright(root.right, true)

elif root.left:

printedge2(root.left)

elif root.right:

printedge2(root.right)

列印二叉樹邊界節點

class treenode def init self,val,left none right none self.val val self.left left self.right right defis leaf self return self.left is none and self.r...

二叉樹問題 二叉樹層級列印

給定二叉樹的頭結點,按層級列印二叉樹節點值。從上到下按層遍歷,應該是先遍歷到的節點先輸出。因此用佇列作為輔助結構來解此題。層級遍歷中關鍵點要知道什麼時候換層。用兩個變數last 和nlast,分別指向當前層的最右邊和下一層的最右邊節點。當當前層的最右邊節點從佇列中輸出時,表示這一層遍歷完畢了,此時使...

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...