这是悦乐书的第194次更新,第199篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第55题(顺位题号是226)。反转二叉树。例如:

输入:

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

输出:

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

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

二叉树的任意一个节点进行反转操作时,当前节点还是当前节点,当前节点的左子节点变成右子节点,当前节点的右子节点变成左子节点。也就是下面的三行核心代码:

  1. TreeNode temp = root.left;
  2. root.left = root.right;
  3. root.right = temp;

如果从根节点开始,那么先把根节点的左右子节点互换,然后利用递归,再将已经互换了的左右子节点他们自身的左右子节点进行互换,最后返回root。

  1. public TreeNode invertTree(TreeNode root) {
  2. if (root == null || (root.left == null && root.right == null)) {
  3. return root;
  4. }
  5. TreeNode temp = root.left;
  6. root.left = root.right;
  7. root.right = temp;
  8. root.left = invertTree(root.left);
  9. root.right = invertTree(root.right);
  10. return root;
  11. }

03 第二种解法

此解法比上面的第一种解法精简了些,直接将上面核心代码进行套用,将root的左子节点取出存入tmp,再将root的左子节点指向递归后的root的右子节点,再将root的右子节点指向递归后的tmp,最后返回root即可。

  1. public TreeNode invertTree2(TreeNode root) {
  2. if (root == null || (root.left == null && root.right == null)) {
  3. return root;
  4. }
  5. TreeNode tmp = root.left;
  6. root.left = invertTree2(root.right);
  7. root.right = invertTree2(tmp);
  8. return root;
  9. }

04 第三种解法

利用队列,借助其先进先出的特性。在进行循环进队列、出队列的操作时,核心代码还是最开始那三行代码,进行左右子节点互换。

  1. public TreeNode invertTree3(TreeNode root) {
  2. TreeNode r = root;
  3. Queue<TreeNode> q = new LinkedList<TreeNode>();
  4. if (root != null) {
  5. q.add(root);
  6. }
  7. while (!q.isEmpty()) {
  8. TreeNode curr = q.remove();
  9. TreeNode temp = curr.left;
  10. curr.left = curr.right;
  11. curr.right = temp;
  12. if (curr.left != null) {
  13. q.add(curr.left);
  14. }
  15. if (curr.right != null) {
  16. q.add(curr.right);
  17. }
  18. }
  19. return r;
  20. }

05 小结

算法专题目前已连续日更超过一个月,算法题文章55+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

LeetCode算法题-Invert Binary Tree的更多相关文章

  1. LeetCode算法题-Balanced Binary Tree(Java实现)

    这是悦乐书的第167次更新,第169篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第26题(顺位题号是110).给定二叉树,判断它是否是高度平衡的.对于此问题,高度平衡二 ...

  2. Python解Leetcode: 226. Invert Binary Tree

    leetcode 226. Invert Binary Tree 倒置二叉树 思路:分别倒置左边和右边的结点,然后把根结点的左右指针分别指向右左倒置后返回的根结点. # Definition for ...

  3. LeetCode算法题-Count Binary Substrings(Java实现)

    这是悦乐书的第293次更新,第311篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第161题(顺位题号是696).给定一个字符串s,计算具有相同数字0和1的非空且连续子串 ...

  4. LeetCode算法题-Construct Quad Tree(Java实现)

    这是悦乐书的第224次更新,第237篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第91题(顺位题号是427).我们想使用四叉树来存储N×N布尔网格.网格中的每个单元格只 ...

  5. LeetCode算法题-Add Binary(Java实现)

    这是悦乐书的第157次更新,第159篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第16题(顺位题号是67).给定两个二进制字符串,返回它们的总和(也是二进制字符串).输 ...

  6. 【LeetCode】226. Invert Binary Tree 翻转二叉树(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 迭代 日期 题目地址: https://lee ...

  7. 【一天一道LeetCode】#226. Invert Binary Tree

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 来源:http ...

  8. LeetCode之226. Invert Binary Tree

    ------------------------------------- 反转树的基本操作. 可是下面那句话是什么鬼啊,这么牛掰的人都会有这种遭遇,确实抚慰了一点最近面试被拒的忧伤..... AC代 ...

  9. 【LeetCode】226 - Invert Binary Tree

    Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9          to 4 / \ 7 2 / \ / \ 9 6 3 1   Notice: Goog ...

随机推荐

  1. Java爬虫之下载全世界国家的国旗图片

    介绍   本篇博客将继续上一篇博客:Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗 的内容,将用Java来实现这个爬虫,下载全世界国家的国旗图片. ...

  2. 从零开始学安全(十五)●DHCP服务

    DHCP,全名为:Dynamic Host Configuration Protocol,动态主机配置协议,它是一种基于UDP的局域网协议,其作用主要有:给主机自动分配IP地址,管理员通过该协议管理内 ...

  3. composer Content-Length mismatch

    今天在执行 :composer update 时一直提示: 本地 package.json如下: { "private": true, "scripts": { ...

  4. Java IO(2)阻塞式输入输出(BIO)

    在上文中<Java IO(1)基础知识——字节与字符>了解到了什么是字节和字符,主要是为了对Java IO中有关字节流和字符流有一个更好的了解. 本文所述的输出输出指的是Java中传统的I ...

  5. Offer选择与总结

    今天是2015.11.23,我估计这也是继高考.保研这些决定与选择之后,又一个比较重大的人生选择.最终选择了去微信支付,按钱来说比最高的offer少五万,其实挺心疼的.但是从发展和部门核心程度来讲,应 ...

  6. Java Filter防止sql注入攻击

    原理,过滤所有请求中含有非法的字符,例如:, & < select delete 等关键字,黑客可以利用这些字符进行注入攻击,原理是后台实现使用拼接字符串,案例:某个网站的登入验证的SQ ...

  7. div 中图片溢出问题及 CSS3中图片翻转问题

    如果设置一个div 装两张以上的图片,如果不设置好div的宽度和高度,就会使图片溢出. 我们知道,div是可以由图片撑开其宽高的,也就是说如果只放一张图片的情况下,不设置div的宽高,div的宽高会默 ...

  8. Openlayer3之绚丽的界面框架-Materialize

    一群做C++的老伙计搞前端开发,徒手写html和css应该会折寿..在网上找了半天,Materialize算是用起来很方便的一款前端界面框架.Google的Material Design看起来感觉还是 ...

  9. 唯一索引的一种使用情景【有则U无则I】

    这个知识点是最近一位面试老师问我的,当时对这种方法不了解,所以只能说那个中效率低的方法了,也就是先进性select判断,然后在执行更新或者插入操作,显然这种是很麻烦的,也自我反思一下,确实有很多的知识 ...

  10. Elasticsearch Search APIs

    Elasticsearch Search APIs By:授客 QQ:1033553122 1. 搜索 1 在单个索引的所有类型中搜索 1 在单个索引的指定类型中搜索 1 在多个指定的索引中搜索 1 ...