Leetcode226. 翻转二叉树

这篇文章介绍了如何翻转一棵二叉树,提供了两种方法:递归和使用栈。在递归方法中,通过交换当前节点的左右子节点来实现翻转;而在栈方法中,利用后进先出的特性,同样达到翻转效果。

题目描述

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

题目解析

  1. 三节点翻转
    直接将跟节点下左右节点互换即可
    在这里插入图片描述

  2. 多层节点
    先将跟节点左右节点互换,再以其左右节点为“根节点”互换其子节点
    在这里插入图片描述

代码实现

# Python3
# Definition for a binary tree node.
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right


class Solution:
    def invertTree(self, root: TreeNode) -> TreeNode:
        def traversal(r: TreeNode):
            # 递归解法
            if r is None:
                return
            r.left, r.right = traversal(r.right), traversal(r.left)
            return r

        return traversal(root)

    def invertTree_stack(self, root: TreeNode) -> TreeNode:
        # 通过栈实现
        if root is None:
            return
        from queue import LifoQueue

        st = LifoQueue()
        st.put(root)
        while not st.empty():
            r = st.get()
            if r:
                r.left, r.right = r.right, r.left
                if r.left:
                    st.put(r.left)
                if r.right:
                    st.put(r.right)
        return root


r = TreeNode(4,
             left=TreeNode(2, left=TreeNode(1), right=TreeNode(3)),
             right=TreeNode(7, left=TreeNode(6), right=TreeNode(9))
             )

r = Solution().invertTree2(r)
print(r.val)
print(r.left.val)
print(r.left.left.val)
print(r.left.right.val)
print(r.right.val)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值