算法-第226题翻转二叉树

200 阅读2分钟

这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战

题目:翻转一颗二叉树

这个题目相对来说比较简单,但是这题比较火,请看这个题目上的备注,如果使用mac电脑的jym一般会用这个工具brew install来安装一些东西。然后开发这个命令的作者去谷歌面试,谷歌让他在白板上解答这道算法题,但是他没有答上来,结果面试挂了。他就在网上吐槽说谷歌的百分之90的人都用我的工具,但是我写不出来就让我面试挂了。

思路:

  • 看题意就是给你一颗二叉树,然后你输出其镜像的二叉树
  • 判断节点是否为空,空的话就直接return终止条件
  • 使用递归将左右的节点交换,再使用解构的方式分别把左右子树的节点递归翻转然后return结果

答案代码:

var invertTree = function(root) {
    //节点为空终止条件
    if(root == null) {
        return root;
    }
    //递归
    [root.left,root.right] = [invertTree(root.right),invertTree(root.left)];    return root;
}

一、二叉树逻辑

二叉树有三种遍历方式:

  1. 前序遍历:先遍历自己--》left左节点--》右节点
  2. 中序遍历:先左节点--》遍历自己节点--》右节点
  3. 后序遍历:先左节点--》右节点--》遍历自己节点

上图是一个简单的二叉树,通过这三种遍历顺序分别是:

  1. 前序遍历结果:1--2--4--5--3--6
  2. 中序遍历结果:4--2--5--1--6--3
  3. 后序遍历结果:4--5--2--6--3--1

二、总结

这几天写的算法题似乎都用到了递归的方式去实现,虽然在工作中算法方面用的很少,基本上都是增删改查,但是递归用的也蛮多的,例如一些多层级的菜单,树状图的组织架构,二维数组或者多级对象等,用递归会更方便简洁,代码洁癖方便也更好看。所以即使不练习算法题,递归也是要多练练的。

但是你们会考虑一个问题吗?有的人在招聘的时候也有要求必须会算法题,各种算法都会问,或者设计模式之类的,但是实际却可能用不到,这就是设置了一条杠,例如学历必须全日制或者985,211人家更受欢迎,会算法和会设计模式感觉更吃香,哎,继续刷题吧~