题目
我们可以为二叉树 T 定义一个 翻转操作 ,如下所示:选择任意节点,然后交换它的左子树和右子树。
只要经过一定次数的翻转操作后,能使 X 等于 Y,我们就称二叉树 X 翻转 等价 于二叉树 Y。
这些树由根节点 root1 和 root2 给出。如果两个二叉树是否是翻转 等价 的树,则返回 true ,否则返回 false 。
思路
跟相同二叉树类似
每个节点要做的就是判断当前节点是否相等,
还有子树是否可以通过反转实现相等, 怎么说呢
就是左右子树可以不对应,反转之后对应也行
代码
var flipEquiv = function (root1, root2) {
//每个节点的左右节点
if (!root1 && !root2) return true;
if (!root1 || !root2) return false;
function dfs(p, q) {
if (!p && !q) return true;
if (!p || !q) return false;
if(p.val !== q.val) return false;
return dfs(p.left,q.left) && dfs(p.right,q.right) || dfs(p.left,q.right) && dfs(p.right,q.left);
}
return dfs(root1,root2);
};