操作给定的二叉树,将其变换为源二叉树的镜像。
二叉树的镜像定义:源二叉树
8
/ \
6 10
/ \ / \
5 7 9 11
镜像二叉树
8
/ \
10 6
/ \ / \
11 9 7 5
先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换它的两个子节点,当交换完所有的非叶子结点的左右子结点之后,就得到了树的镜像。
本程序实现以下二叉树的镜像:
本程序实现以下二叉树的镜像:
E
/ \
A G
\ \
C F
/ \
B D
镜像二叉树应该为:
E
/ \
G A
/ /
F C
/ \
D B
# -*- coding: utf-8 -*-
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
# 前序遍历,观察输出结果
def preTravese(root):
if root is None:
return 0
print(root.val, end=' ')
preTravese(root.left)
preTravese(root.right)
# 实现树的镜像
class Solution:
def mirror(self, root):
if root is None:
return 0
if root is not None:
root.left, root.right = root.right, root.left # 左右结点交换
self.mirror(root.left)
self.mirror(root.right)
return root
if __name__ == '__main__':
# 初始化结点
a = TreeNode("A")
b = TreeNode("B")
c = TreeNode("C")
d = TreeNode("D")
e = TreeNode("E")
f = TreeNode("F")
g = TreeNode("G")
# 结点之间的关系
e.left = a
e.right = g
a.right = c
c.left = b
c.right = d
g.right = f
# 根结点
root = e
print("原来的树:")
preTravese(root)
s = Solution()
print("\n")
print("镜像树:")
preTravese(s.mirror(root))
运行结果:
原来的树:
E A C B D G F
镜像树:
E G F A C D B
Process finished with exit code 0