刷题LeetCode101。对称二叉树
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/symmetric-tree/ 题目描述
给定一个二叉树的根节点,检查是否轴对称。 题目分析
若一个树的左右子树镜像对称,那么这个二叉树就是对称的。
那么左右两个树什么情况下互为镜像? 它们的两个根结点具有相同的值 每个树的右子树都与另一个树的左子树镜像对称
因而,可考虑用递归实现。 代码实现public class DuiCheng101 { /** * 迭代算法 * 队列中添加 对称的两个节点,判断是否一致 * * @param root * @return */ public boolean isSymmetric2(TreeNode root) { if (root == null) { return true; } TreeNode left = root.left; TreeNode right = root.right; Queue queue = new LinkedList(); queue.offer(left); queue.offer(right); while (!queue.isEmpty()) { left = queue.poll(); right = queue.poll(); if (left == null && right == null) { continue; } if (left == null || right == null) { return false; } if (left.val != right.val) { return false; } queue.offer(left.left); queue.offer(right.right); queue.offer(left.right); queue.offer(right.left); } return true; } /** * 【递归】 * 比较左右两棵树 * * @param root * @return */ public boolean isSymmetric(TreeNode root) { if (root == null) { return true; } return check(root.left, root.right); } private boolean check(TreeNode p, TreeNode q) { if (p == null && q == null) { return true; } if (p == null && q != null) { return false; } 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); } }复杂度时间复杂度:O(n),因为遍历了整棵树,因而渐进时间复杂度为O(n) 空间复杂度:递归层数不超过n,因而渐进空间复杂度为O(n)
好了,今天就到这里,感谢各位看官到这里,不如点个关注吧!