任意給定一棵二叉樹,實現對二叉樹的逐層遍歷,並將奇數層順序輸出,偶數層逆序輸出。如建立如下的二叉樹:
···················root
········ ·····7 ·········· 8
·········6
·····2······5
·1······3·····4
class TreeNode(object):
def __init__(self,data=0,left=None,right=None):
self.data = data
self.left = left
self.right = right
# 遍歷某一層所有節點,並打印
def TransLevel(root,level):
if root == None:
return
else:
if level == 1 and isinstance(root, TreeNode):
print("%s " % root.data)
zhou.append(root.data)
shou.append(root.data)
else:
if isinstance(root, TreeNode):
TransLevel(root.left, level-1)
TransLevel(root.right, level-1)
def treeDepth(tree):
if not isinstance(tree, TreeNode):
return 0
leftDepth=treeDepth(tree.left)
rightDepth=treeDepth(tree.right)
if leftDepth>rightDepth:
return leftDepth+1
if rightDepth>=leftDepth:
return rightDepth+1
def treeWidth(tree):
curwidth=1
maxwidth=0
q=queue.Queue()
q.put(tree)
while not q.empty():
n=curwidth
for i in range(n):
tmp=q.get()
curwidth-=1
if tmp.left:
q.put(tmp.left)
curwidth+=1
if tmp.right:
q.put(tmp.right)
curwidth+=1
if curwidth>maxwidth:
maxwidth=curwidth
return maxwidth
# 建立的二叉樹
# ------------------------
# root
# 7 8
# 6
# 2 5
# 1 3 4
#
# -------------------------
n1 = TreeNode(data=1)
n2 = TreeNode(2,n1,0)
n3 = TreeNode(3)
n4 = TreeNode(4)
n5 = TreeNode(5,n3,n4)
n6 = TreeNode(6,n2,n5)
n7 = TreeNode(7,n6,0)
n8 = TreeNode(8)
root = TreeNode('root',n7,n8)
level=treeDepth(root)
maxwidth=treeWidth(root)
zhou=[] #裝二叉樹某一層遍歷到的節點
shou=[] #裝二叉樹的層次遍歷的所有節點
for i in range(1,level):
count=0 #記錄本層有多少個節點
TransLevel(root, i)
if i%2==0: #因爲下標從0開始,實際的奇數層
print('第{}層有{}個節點: {} '.format(str(i),str(len(zhou)),zhou[:]))
elif i%2==1: #實際的偶數層
print('第{}層有{}個節點: {} '.format(str(i),str(len(zhou)),zhou[::-1]))
print('=========================================================')
zhou=[]