剑指Offer-二叉树的镜像-python

本篇博客探讨如何将给定的二叉树转换为其镜像,提供了递归和非递归两种解决方案。递归方法通过前序遍历并交换非叶节点的左右子节点来完成;非递归方法则采用另一种算法实现树的镜像转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

操作给定的二叉树,将其变换为源二叉树的镜像。

思路:
递归或者非递归

递归:先前序遍历这棵树的每个节点,如果遍历到的节点有子节点,就交换它的两个字节点。
当交换完所有的非叶节点的左、右子节点之后,就得到了树的镜像。

非递归:

实现(递归):

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回镜像树的根节点
    def Mirror(self, root):
        # write code here
        if root is None:
            return
        if root.left is None and root.right is None:
            return
        
        pTemp = root.left
        root.left = root.right
        root.right = pTemp
        
        if root.left:
            self.Mirror(root.left)
        if root.right:
            self.Mirror(root.right)

实现(非递归):

class Solution:
    # 返回镜像树的根节点
    def Mirror(self, root):
        if root == None:
            return
        stackNode = []
        stackNode.append(root)
        while len(stackNode) > 0:
            nodeNum = len(stackNode) - 1
            tree = stackNode[nodeNum]
            stackNode.pop()
            nodeNum -= 1
            if tree.left != None or tree.right != None:
                tree.left, tree.right = tree.right, tree.left
            if tree.left:
                stackNode.append(tree.left)
                nodeNum += 1
            if tree.right:
                stackNode.append(tree.right)
                nodeNum += 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值