震惊!超级大牛开发者面试被拒!居然只是因为不会翻转二叉树?

NO.141 环形链表 简单

tPs8ts.png

震惊!著名软件 Homebrew 的作者 Max Howell 在 面试 Google 被拒,竟然是因为不会这个!
在这里插入图片描述
Google:我们 90% 的工程师都用你写的软件(Homebrew),但你没法在白板上翻转二叉树,所以滚蛋吧

思路一:深度优先遍历 从根节点开始,交换左右子树,然后递归的交换左右子树的左右子树。终止条件是子树节点为空。

public TreeNode invertTree(TreeNode root) {
    //节点为空终止
    if (root ==null) return root;
    //交换根节点的左右子树
    TreeNode temp = root.right;
    root.right = root.left;
    root.left = temp;
    //分别交换左右子树的左右子树
    invertTree(root.right);
    invertTree(root.left);
    return root;
}

时间复杂度:O(n) 空间复杂度:O(h) h 是树高

思路二:广度优先遍历 广搜二叉树,并且遍历过程中交换树中所有节点的左子树和右子树 。

public TreeNode invertTree(TreeNode root) {
        if (root == null) return root;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            TreeNode poll = queue.poll();
            //交换左右子树
            TreeNode temp = poll.right;
            poll.right = poll.left;
            poll.left = temp;
            //左右子树不空,则入队
            if (poll.left != null) queue.offer(poll.left);
            if (poll.right != null) queue.offer(poll.right);
        }
        return root;
    }

时间复杂度:O(n) 空间复杂度:O(w) 树的最大宽度 w


最后再卑微的啰嗦一句:码字不易,如果有帮助到你请点赞关注+收藏哦!

本人菜鸟,有错误请告知,感激不尽!

更多题解源码和学习笔记:githubCSDNM1ng

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值