3.11python如何对二叉树进行镜像反转

题目描述:

二叉树的镜像就是二叉树对称的二叉树,就是交换每一个非叶子结点的左子树指针和右子树指针,如下图所示。注意,请勿对该树做任何假设,它不一定是平衡二叉树,也不一定有序。
在这里插入图片描述

思路:

从上面的图可以看出,要实现二叉树的镜像反转,只需要交换二叉树中所有结点的左右孩子即可。由于对所有的结点都做了同样的操作,所以可以用递归的方法来实现。由于按层打印二叉树,所以需要用到队列。

代码实现:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time    : 2020/1/26 10:58
# @Author  : buu
# @Software: PyCharm
# @Blog    :https://blog.csdn.net/weixin_44321080
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 array2treee(arr, start, end):
    """
    把有序数组转换为二叉树
    :param arr:数组
    :param start:数组起点
    :param end:数组终点
    :return:
    """
    root = None
    if end >= start:
        root = BiTNode()
        mid = (start + end + 1) // 2
        root.data = arr[mid]  # 树的根节点为数组中间的元素
        # print(root.data,end=' ')
        root.lchild = array2treee(arr, start, mid - 1)  # 递归地构建左子树
        root.rchild = array2treee(arr, mid + 1, end)  # 递归地构建右子树
    else:
        root = None
    return root


def printTreeLayer(root):
    """
    层次遍历树并打印结点
    :param root: 要遍历的树的根节点
    :return:
    """
    if root == None:
        return
    queue = deque()
    queue.append(root)
    while len(queue) > 0:
        p = queue.popleft()  # 队首出队列
        print(p.data, end=' ')
        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 = array2treee(arr, 0, len(arr) - 1)
    print('before: ', end='')
    printTreeLayer(root)
    print()
    reverseTree(root)
    print('after: ', end='')
    printTreeLayer(root)

结果:
在这里插入图片描述
算法性能分析:
对给定的二叉树进行了一次遍历,时间复杂度为O(n);

end

发布了76 篇原创文章 · 获赞 2 · 访问量 2553

猜你喜欢

转载自blog.csdn.net/weixin_44321080/article/details/104086218
今日推荐