一、leetcode算法
1、对称二叉树
1.1、题目
给你一个二叉树的根节点 root , 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
1.2、思路
思路一:此题我们可以使用递归的方式来解决问题,首先遵循以下几个条件。
1.它们的两个根结点具有相同的值
2.每个树的右子数都与另一个树的左子树镜像对称
1.3、答案
class Solution { public boolean isSymmetric(TreeNode root) { return check(root, root); } public boolean check(TreeNode p, TreeNode q){ //如果左右子树都为空,证明对称 if(p == null && q == null){ return true; } //如果左右子树有一个为空,另一个不为空,则不对称 if(p == null || q == null){ return false; } //如果左右节点的值不相同,则不对称 if(p.val != q.val){ return false; } //如果上述条件未击中,则递归判断左子树的左节点和右子数的右节点,以及左子树的右节点和右子数的左节点; return check(p.left, q.right) && check(p.right,q.left); } }
复杂度分析
假设树上一共 n 个节点。
时间复杂度:这里遍历了这棵树,渐进时间复杂度为 O(n)。
空间复杂度:这里的空间复杂度和递归使用的栈空间有关,这里递归层数不超过 n,故渐进空间复杂度为 O(n)。