要求:
给定一棵二叉树,要求输出其左右翻转后二叉树的层次遍历。
解析:
两个步骤:
- 镜像翻转:只需要遍历二叉树,每次访问一个结点时,交换其左右孩子。
- 层次遍历。
代码实现:
# -*- coding:utf-8 -*-
from collections import deque
class BiTNode():
def __init__(self):
self.data = None
self.lchild = None
self.rchild = None
#对二叉树进行镜像反转
def reverseTree(root):
if root == None:
return
reverseTree(root.lchild)
reverseTree(root.rchild)
tmp = root.lchild
root.lchild = root.rchild
root.rchild = tmp
def arraytotree(arr,start,end):
root = None
if end >= start:
root = BiTNode()
mid = int((start+end+1)/2)
#树的根节点为数组中间元素
root.data = arr[mid]
#递归左半部分数组构造root左子树
root.lchild = arraytotree(arr,start,mid-1)
#递归右半部分数组构造root右子树
root.rchild = arraytotree(arr,mid+1,end)
else:
root = None
return root
def printTreeLayer(root):
if root == None:
return
queue = deque()
#树根节点进队列
queue.append(root)
while len(queue) > 0:
p = queue.popleft()
#访问当前结点
print(p.data)
#如果左孩子不空则入队
if p.lchild != None:
queue.append(p.lchild)
#如果右孩子不空则入队
if p.rchild != None:
queue.append(p.rchild)
if __name__ == "__main__":
arr = [1,2,3,4,5,6,7]
root = arraytotree(arr,0,len(arr)-1)
print("二叉树层次遍历为:")
printTreeLayer(root)
reverseTree(root)
print("反转二叉树层次遍历为:")
printTreeLayer(root)
运行结果:
二叉树层次遍历为:
4
2
6
1
3
5
7
反转二叉树层次遍历为:
4
6
2
7
5
3
1