问题
剑指 Offer 26. 树的子结构
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
题意理解: 判断B否是A的子结构 遍历A树, 找到与B首节点相等的值的A节点,以B为参照,判断A是否和B相同,相同返回true, 否则急需遍历A 遍历完A树没找到,返回null
if (!A || !B) {
return false;
}
function isSameTree(a, b) {
if (!b) {
return true;
}
if (!a) {
return false;
}
if (a.val !== b.val) {
return false;
}
return isSameTree(a.left, b.left) && isSameTree(a.right, b.right);
};
return (isSameTree(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B));
剑指 Offer 27. 二叉树的镜像
请完成一个函数,输入一个二叉树,该函数输出它的镜像。
题意理解 将二叉树,整体对称,即每一层每一科都对称
- 如果节点存在,则左右互换,一直递归
var mirrorTree = function (root) {
if (root === null) {
return null;
}
const left = mirrorTree(root.left);
const right = mirrorTree(root.right);
root.left = right;
root.right = left;
return root;
};
剑指 Offer 28. 对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
题意理解 将二叉树的镜像输出来,也就是将他对称的另一半输出
- 使用递归,左右子节点都不存在则返回true
- 左右子节点有一个不存在返回false
- 左右节点都存在但是值不同返回false
var isSymmetric = function(root) {
if(!root) return true;
function dfs(left, right) {
if(!left && !right) return true;
if(!left || !right) return false;
if(left.val !== right.val) return false;
return dfs(left.left,right.right) && dfs(left.right,right.left);
}
return dfs(root.left,root.right);
};