給定一棵二叉樹的頭節點 head,按照如下兩種標準分別實現二叉樹邊界節點的逆時針列印。
標準:
例如,如圖 3-2 所示的樹。
按標準1的列印結果為:
1,2,4,7,11,13,14,15,16,12,10,6,3
class
node
:def
__init___
(self, data)
: self.right =
none
self.left =
none
self.val = data
defprintedge
(head: node)
:if head is
none
:return
# 獲取樹的深度
height = get_height(head,0)
edgemap =[[
none
,none
]* height]
# 設定左右邊界的陣列
setedgemap(h,
0, edgemap)
# 列印左邊界節點
for i in
range
(len
(edgemap)):
if edgemap[i][0
]!= edgemap[i][1
]:print
(edgemap[i][0
].value,
" ")
# 列印不在左右邊界的葉子節點
printleafnotinmap(head,
0, edgemap)
# 列印右邊界節點
for i in
range
(len
(edgemap)-1
,-1,
-1):
if edgemap[i][0
]!= edgemap[i][1
]:print
(edgemap[i][1
].value,
" ")
print
("\n"
)def
setedgemap
(h, l, edgemap)
:if h is
none
:return
none
edgemap[l][0
]= h if edgemap[0]
isnone
else edgemap[0]
edgemap[l][1
]= h
setedgemap(h.left, l+
1, edgemap)
setedgemap(h.right, l+
1, edgemap)
defget_height
(head, l)
:if h is
none
:return l
return
max(get_height.left, l+1)
, get_height(head.right, l+1)
)def
printleafnotinmap
(head, l, m)
:if h is
none
:return
if h.left is
none
and h.right is
none
and h != m[l][0
]and h!=m[l][0
]:print
(h.value,
" ")
printleafnotinmap(h.left, l+
1, m)
printleafnotinmap(h.right, l+
1, m)
3 1 列印二叉樹邊界節點 II
給定一棵二叉樹的頭節點 head,按照如下兩種標準分別實現二叉樹邊界節點的逆時針列印。標準 例如,如圖 3 2 所示的樹。按標準的列印結果為 1,2,4,7,13,14,15,16,10,6,3class node def init self,data self.value data self.ri...
列印二叉樹邊界節點
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...
二叉樹問題 列印二叉樹的邊界節點
問題 給定一棵二叉樹的頭節點,按照如下兩種標準分別實現二叉樹邊界節點的逆時針列印。標準一 1.頭節點為邊界節點 2.葉節點為邊界節點 3.如果節點在其所在層中的最左邊或最右邊,那麼也是邊界節點標準二 1.頭節點為邊界節點 2.葉節點為邊界節點 3.樹左邊界延伸下去的路徑為邊界節點 4.樹右邊界延伸下...