Python3實現二叉樹的逐層遍歷,並將奇數層順序輸出,偶數層逆序輸出

任意給定一棵二叉樹,實現對二叉樹的逐層遍歷,並將奇數層順序輸出,偶數層逆序輸出。如建立如下的二叉樹:

···················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=[]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章