翻转二叉树

本文介绍了如何翻转二叉树,包括使用递归和迭代两种方法。递归法通过翻转根节点的左右子树并交换它们来实现,空间复杂度为O(n)。迭代法利用队列进行层次遍历,时间复杂度为O(N),空间复杂度为O(1)。同时,文章提到了Google面试中的一道相关问题,强调了即使在日常广泛使用的工具背后,基础算法知识的重要性。
摘要由CSDN通过智能技术生成

2015年,Homebrew 的作者 Max Howell 在 Twitter 上发布了一条消息:
在这里插入图片描述
brew作者在Google挂了,还发twitter说,Google面试官说:对不起,虽然我们全公司的人都在用你的brew但是你竟然不能写出反转二叉树的代码,所以,滚吧。

你可以在leetcode上做这道题,有一种答案只需要8行代码。这个题目的难度属于Easy,根据leetcode的定义,如果Easy难度的题目无法在面试中答出来,确实是拿不到Offer的。

https://leetcode-cn.com/problems/invert-binary-tree/
在这里插入图片描述
从这道题我们可以看到,图中的左右子树进行了互换,而且是最大的树之内的任何一个子树而言,它的左右子树也都进行了反转。

一、递归

步骤如下:

  • 翻转根节点的左子树(递归调用当前函数)
  • 翻转根节点的右子树(递归调用当前函数)
  • 交换根节点的左子节点与右子节点
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
   
    public TreeNode invertTree (TreeNode root) {
   

      if (root == null)
         return null;

      invertTree(root.left);//翻转根结点的左子树
      invertTree(root.right);//翻转根结点的右子树

      TreeNode tmp = root.left; //交换左子节点和右子节点
      root.left <
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值