Python二叉樹和二叉樹的鏡像

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