攻不下dfs不参加比赛(四)
为什么练dfs
相信学过数据结构的朋友都知道dfs(深度优先搜索)是里面相当重要的一种搜索算法,可能直接说大家感受不到有条件的大家可以去看看一些算法比赛。这些比赛中每一届或多或少都会牵扯到dfs,可能提到dfs大家都知道但是我们为了避免眼高手低有的东西看着自己很明白就是写不出来。为了避免这种尴尬我们这几天乘着这个活动练练,好了我们话不多说开始肥学。
题目
给你一个二叉树的根节点 root , 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3] 输出:false
思路:也是基于深度优先搜索的思想,将一个树复制成两棵然后让两棵树进行比较返回结果
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public boolean check(TreeNode root1,TreeNode root2){ if(root1==null&&root2==null){ return true; }else if(root1==null||root2==null){ return false; }else if(root1.val!=root2.val)return false; return check(root1.left,root2.right)&&check(root1.right,root2.left);//这里不用想太多只要上面的结束条件想清楚了,自然就得到结果了 } public boolean isSymmetric(TreeNode root) { return check(root,root); } }
总结
假设树上一共 nn 个节点。 时间复杂度:这里遍历了这棵树,渐进时间复杂度为 O(n)O(n)。 空间复杂度:这里的空间复杂度和递归使用的栈空间有关,这里递归层数不超过 nn,故渐进空间复杂度为 O(n)O(n)。