leetcode【二叉树—简单】226.翻转二叉树

文章目录

前言

哈喽,我是长路,目前刚刚大三,方向是后端也偶尔捣鼓下前端,现在的主语言是Java。之前一大段时间都是在学习web开发的一些技术,就很久没有进行类似于数据结构、算法之类的学习与刷题,打算这段时间拾起来好好学一学、搞一搞。

这段时间也是机缘巧合看到草帽路飞的博客,加了自学群,正巧看到博主组织在群里组织了leetcode刷题打卡活动,我也就参与进来,为期一个月,打算坚持每天都花一些时间做一些题目,并通过博客的方式来进行记录。

目前跟着一个Github仓库刷题(leetcode):代码随想录leetcode刷题,当前为二叉树专题。



题目

题目来源leetcode

leetcode地址:226. 翻转二叉树,难度:简单。

题目描述(摘自leetcode):

翻转一棵二叉树。
示例:
输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9

输出:
     4
   /   \
  7     2
 / \   / \
9   6 3   1
备注:
这个问题是受到 Max Howell 的 原问题 启发的 :
谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。


题解

NO1:前序遍历+反转左右孩子

思路:使用前序递归遍历二叉树,每遍历一个二叉树节点过程中进行交换该节点的左右孩子,即可最终实现二叉树反转。

代码:

public TreeNode invertTree(TreeNode root) {
    invertTreeNode(root);
    return root;
}

/**
     * 前序遍历(递归),每遍历到一个元素对其左右孩子进行交换
     * @param root 当前节点
     */
public void invertTreeNode(TreeNode root){
    if( root == null ){
        return;
    }else{
        //交换该节点的左右节点
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;
        //递归遍历左右节点
        invertTree(root.left);
        invertTree(root.right);
    }
}


参考文章

[1]. leetcode题解

[2]. 代码随想录—226.翻转二叉树


我是长路,感谢你的耐心阅读。如有问题请指出,我会积极采纳! 欢迎关注我的公众号【长路Java】,分享Java学习文章及相关资料 Q群:851968786 我们可以一起探讨学习 注明:转载可,需要附带上文章链接

整理者:长路 时间:2021.11.8

评论区请在客户端页面查看