前言
数据结构与算法属于开发人员的内功,不管前端技术怎么变,框架怎么更新,版本怎么迭代,它终究是不变的内容。 始终记得在参加字节青训营的时候,月影老师说过的一句话,不要问前端学不学算法。计算机学科的每一位都有必要了解算法,有
写出高质量代码的潜意识
。
一、问题描述
我们可以为二叉树 T 定义一个 翻转操作 ,如下所示:选择任意节点,然后交换它的左子树和右子树。
只要经过一定次数的翻转操作后,能使 X 等于 Y,我们就称二叉树 X 翻转 等价 于二叉树 Y。
这些树由根节点 root1 和 root2 给出。如果两个二叉树是否是翻转 等价 的函数,则返回 true ,否则返回 false 。
示例 1:
输入:root1 = [1,2,3,4,5,6,null,null,null,7,8], root2 = [1,3,2,null,6,4,5,null,null,null,null,8,7] 输出:true 解释:我们翻转值为 1,3 以及 5 的三个节点。
示例 2:
输入: root1 = [], root2 = [] 输出: true
示例 3:
输入: root1 = [], root2 = [1] 输出: false
提示:
- 每棵树节点数在 [0, 100] 范围内
- 每棵树中的每个值都是唯一的、在 [0, 99] 范围内的整数
二、思路讲解
本题采用递归比较的方式来实现,核心思路如下
- 如果两个节点都为null 返回true
- 仅有一个为null 返回false
- 都不为null但是值不相等返回false
- 比对第一个节点的左子树和第二个节点的右子树or左子树 && 第一个节点的右子树和第二个节点的右子树or左子树
三、AC代码
var flipEquiv = function(root1, root2) { if(root1 == null && root2 == null) return true; else if (root1==null || root2 == null) return false; if(root1.val!=root2.val) return false return (flipEquiv(root1.left,root2.right) || flipEquiv(root1.left,root2.left)) && (flipEquiv(root1.right,root2.left) || flipEquiv(root1.right,root2.right)) };
后续
- 地址: 翻转等价二叉树
好了,本篇 力扣-翻转等价二叉树
到这里就结束了,我是邵小白,一个在前端领域摸爬滚打的大三学生,欢迎👍评论。