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

你可能感兴趣的:(python剑指offer)