問題:
給定一棵二叉樹的頭節點,按照如下兩種標準分別實現二叉樹邊界節點的逆時針列印。
標準一:
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的所在子樹...