1. 題目描述
操作給定的二叉樹,將其變換爲源二叉樹的鏡像。
2. 輸入描述
二叉樹的鏡像定義:源二叉樹
8
/ \
6 10
/ \ / \
5 7 9 11
鏡像二叉樹
8
/ \
10 6
/ \ / \
11 9 7 5
3. 思路
先前序遍歷這棵樹的每個結點,如果遍歷到的結點有子結點,就交換它的兩個子節點,當交換完所有的非葉子結點的左右子結點之後,就得到了樹的鏡像。
本程序實現以下二叉樹的鏡像:
本程序實現以下二叉樹的鏡像:
E
/ \
A G
\ \
C F
/ \
B D
鏡像二叉樹應該爲:
E
/ \
G A
/ /
F C
/ \
D B
4.Python程序代碼如下:
# -*- 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