1 . 判断是否是树的子结构
[](剑指 Offer 26. 树的子结构 - 力扣(LeetCode))
DFS (深度优先搜索),递归进行搜索,相当于树的先序遍历
分析: 该题不能直接判断当前结点是否相同 ,再递归遍历它们的左右子节点是否相同 ,因为该题不知道子树根节点 B 是从树 A 的哪开始成为 A 的子树的。
所以: dfs递归函数应当单独再写一个 ,原函数需要用来找到 B 是从哪开始成为 A 的子树的!!! 代码如下 :
2 . 得到二叉树的镜像二叉树
[](二叉树的镜像 - 二叉树的镜像 - 力扣(LeetCode))
dfs对二叉树进行前序遍历 ,遇到非叶子结点 ,则交换其左右子树 !!!
3 . 对称的二叉树
[](剑指 Offer 28. 对称的二叉树 - 力扣(LeetCode))
两种方法 :bfs 层序遍历检验、dfs 递归检验 bfs思想: 从每层的开始和后面进行比较,相同比较开始++和最后-- , 遇见不同就不对称 ,每层都满足就对称。
dfs思想 : 从根节点的左右两个节点开始 ,只要满足两节点本身相同 ,且左节点的右子树等于右节点的左子树 ,且左节点的左子树等于右节点的右子树。 代码如下 :
var judge = function(left,right){
if(!left&&!right) return true;
if(!left&&right||!right&&left) return false;
return left.val===right.val&&judge(left.left,right.right)&&judge(left.right,right.left);
}
var isSymmetric = function(root) {
if(!root) return true;
return judge(root.left,root.right);
};