文章目录


前言

哈喽,我是长路,目前刚刚大三,方向是后端也偶尔捣鼓下前端,现在的主语言是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 我们可以一起探讨学习