翻转二叉树,力扣

这篇具有很好参考价值的文章主要介绍了翻转二叉树,力扣。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

题目地址:

题目:

我们直接看题解吧:

快速理解解题思路小建议:

解题方法:

方法分析:

解题分析:

具体流程:

代码实现(递归):

补充说明:

解题思路(利用栈/队列):

具体流程:


题目地址:

226. 翻转二叉树 - 力扣(LeetCode)

难度:简单

今天刷翻转二叉树,大家有兴趣可以点上面链接,看看题目要求,试着做一下

题目:

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

翻转二叉树,力扣,# 树/二叉树,java,算法,开发语言

我们直接看题解吧:

快速理解解题思路小建议:

可以先简单看一下解题思路,然后照着代码看思路,会更容易理解一些。

解题方法:

方法1递归

方法2利用栈/队列

方法分析:

实际上,递归相当于隐式栈/队列,方法2即为显式

解题分析:

二叉树镜像定义:

        对于二叉树中任意节点 root,设其左 / 右子节点分别为 left,right ;

        则在二叉树的镜像中的对应 root 节点,其左 / 右子节点分别为 right,left 。

翻转二叉树,力扣,# 树/二叉树,java,算法,开发语言

解题思路(递归):

我们从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转

如果当前遍历到的节点 root的左右两棵子树都已经翻转,那么我们只需要交换两棵子树的位置,即可完成以 root 为根节点的整棵子树的翻转。

具体流程:

1、终止条件:当节点root为空(即越过叶子节点时),返回null

2、递归:   

             初始化临时节点tmp,用于临时存储root的左子节点。

              递归右子节点,并将返回值作为root的左子节点

             递归左子节点,并将返回值作为root的右子节点

3、最后返回当前节点root

可结合题解PDF进行理解--->226. 翻转二叉树 - 力扣(LeetCode) 

代码实现(递归):

class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) return null;//当节点root为空(即越过叶子节点时),返回null
        TreeNode tmp = root.left; //初始化临时节点tmp,用于临时存储root的左子节点。
        root.left = invertTree(root.right);//递归右子节点,并将返回值作为root的左子节点
        root.right = invertTree(tmp);//递归左子节点,并将返回值作为root的右子节点
        return root;//最后返回当前节点root
    }
}

补充说明:

1、由代码可知递归先遍历完整棵树的右子树遍历左左子树

2、为何序暂存root的左子节点?

      在递归右子节点执行完后,root.left的值已发生改变,此时直接递归左子节点则会出问题

 

解题思路(利用栈/队列):

利用栈(或队列)遍历树的所有节点node,并交换每个 node 的左 / 右子节点。

具体流程:

  1、 特殊处理:当root为空时,直接返回null

   2、初始化:创建栈/队列,加入根节点

   3、循环交换(当stack为空时跳出循环)

        出栈:弹出节点赋值给节点node

         添加子节点:将node节点的左右子节点压入栈

        交换:利用临时节点tmp,对node的左右子节点进行交换

4、最后返回根节点root

代码实现(利用栈/队列):文章来源地址https://www.toymoban.com/news/detail-819135.html

class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) return null;//当root为空时,直接返回null
        Stack<TreeNode> stack = new Stack<>() {{ add(root); }};//创建栈/队列,加入根节点
        while (!stack.isEmpty()) {//循环交换(当stack为空时跳出循环)
            TreeNode node = stack.pop();  //弹出节点赋值给节点node
            if (node.left != null) stack.add(node.left);//将node节点的左右子节点压入栈
            if (node.right != null) stack.add(node.right);//将node节点的左右子节点压入栈
            TreeNode tmp = node.left;
            node.left = node.right;//利用临时节点tmp,对node的左右子节点进行交换
            node.right = tmp;
        }
        return root;//返回根节点root
    }
}

到了这里,关于翻转二叉树,力扣的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【算法与数据结构】226、LeetCode翻转二叉树

    所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。    思路分析 :这道题的思路很简单,本质上就是遍历每一个节点,然后交换左右节点。我们可以用前中后遍历或者是层次遍历法来做,参考这两篇文章,【算法与数据结构】144、94、145LeetCode二

    2024年02月16日
    浏览(41)
  • 【数据结构与算法】力扣:对称二叉树

    给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root = [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root = [1,2,2,null,3,null,3] 输出:false 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/symmetric-tree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请

    2024年02月13日
    浏览(38)
  • 力扣101 对称二叉树 Java版本

    给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root = [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root = [1,2,2,null,3,null,3] 输出:false 提示: 树中节点数目在范围 [1, 1000] 内 -100 = Node.val = 100 进阶:你可以运用递归和迭代两种方法解决这个问题吗? 思路在代码中

    2024年02月22日
    浏览(40)
  • 【数据结构与算法】力扣:二叉树的层序遍历

    给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例1: 输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] 示例 2: 输入:root = [1] 输出:[[1]] 示例 3: 输入:root = [] 输出:[] 来源:力扣(LeetCode) 链接:https://leetcode.cn/p

    2024年02月13日
    浏览(47)
  • 力扣第236题——二叉树的最近公共祖先 (C语言题解)

    给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大( 一个节点也可以是它自己的祖先 )。” 示例 1: 示例 2: 示例

    2024年01月20日
    浏览(41)
  • 二叉树OJ题:LeetCode--226.翻转二叉树

    朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中第226道二叉树OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! 数据结构与算法专栏: 数据结构与算法 个  人  主  页  : stackY、 C 语 言 专 栏 : C语言:从入门到精通 LeetCo

    2024年02月11日
    浏览(44)
  • 力扣-根据前序和后序遍历构造二叉树(java)

    原题链接: https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-postorder-traversal/ 题目描述: 给定两个整数数组,preorder 和 postorder ,其中 preorder 是一个具有 无重复 值的二叉树的前序遍历,postorder 是同一棵树的后序遍历,重构并返回二叉树。 如果存在多个答案,您可以返回

    2024年02月08日
    浏览(46)
  • day15 层序遍历 翻转二叉树 对称二叉树

    题目链接:102 二叉树的层序遍历 题意 根据二叉树的根节点root,返回其节点值的层序遍历 借助队列实现,因为队列是先进先出的逻辑,符合层序遍历一层一层遍历的思想 代码 题目链接:226 翻转二叉树 题意 根据二叉树的根节点root,翻转二叉树,将节点是左右孩子进行翻转

    2024年01月22日
    浏览(48)
  • C# 翻转二叉树

    给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: 输入:root = [2,1,3] 输出:[2,3,1] 示例 3: 输入:root = [] 输出:[] 提示: 树中节点数目范围在 [0, 100] 内 -100 = Node.val = 100 来源:力扣(LeetCode) 链

    2024年02月15日
    浏览(31)
  • 226. 翻转二叉树

    2024年02月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包