二叉树--对称二叉树
Posted 算法和数据结构
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树--对称二叉树相关的知识,希望对你有一定的参考价值。
来源:LeetCode
难度:简单
描述:
给定一个二叉树,检查它是否是镜像对称的。
示例1:
二叉树 [1,2,2,3,4,4,3] 是对称的。
示例2:
二叉树[1,2,2,null,3,null,3] 则不是镜像对称的:
分析:
所谓对称二叉树,就是以根节点为中心点做垂直线,左右折叠节点位置和数值完全一样的二叉树。注意是折叠,不是平移
上面的特点在二叉树上的体现就是根节点的左节点等于右节点,且左节点的左节点等于右节点的右节点,左节点的右节点等于右节点的左节点...,依次类推扩散,具体解法思路步骤如下
解题
方法一:递归
思路:如分析,从根节点开始向左右节点扩散,依次比较左节点和右节点、左节点的左节点和右节点的右节点、左节点的右节点和右节点的左节点...,即左边指针往左走,右边指针就往右走,左边指针往右走,右边指针就往左走,直至二叉树遍历完毕或者节点值不相等
代码:
1public boolean isSymmetric(TreeNode root) {
2 if (root == null) {
3 return true;
4 }
5 return isSymmetric(root.left, root.right);
6}
7
8public boolean isSymmetric(TreeNode left, TreeNode right) {
9 //子节点遍历完毕
10 if (left == null && right == null) {
11 return true;
12 }
13 if (Objects.nonNull(left) && Objects.nonNull(right)) {
14 //先判断本节点值是否相等
15 if (left.val != right.val) {
16 return false;
17 }
18 //左节点往左走,右节点就往右走
19 //左节点往右走,右节点就往左走
20 return isSymmetric(left.left, right.right) & isSymmetric(left.right, right.left);
21 }
22 return false;
23}
时间复杂度:O(n)
空间复杂度:O(n)
方法二:队列迭代法
思路:和方法一思路一致,只不过用两个队列来分别存储左子树和右子树的节点,并挨个进行比较,入队时,左子树入左子节点,右子树就入右子节点,左子树入右子节点,右子树就入左子节点...依次类推
代码:
1public boolean isSymmetric(TreeNode root) {
2 if (root == null) {
3 return true;
4 }
5 return check(root);
6}
7
8public boolean check(TreeNode root) {
9 //用两个队列分别存储根节点左右子树的节点
10 Queue<TreeNode> left = new LinkedList<>();
11 Queue<TreeNode> right = new LinkedList<>();
12 left.offer(root.left);
13 right.offer(root.right);
14 while (!left.isEmpty() && !right.isEmpty()) {
15 TreeNode treeNodeLeft = left.poll();
16 TreeNode treeNodeRight = right.poll();
17 if (treeNodeLeft == null && treeNodeRight == null) {
18 continue;
19 }
20 if (Objects.nonNull(treeNodeLeft) && Objects.nonNull(treeNodeRight)) {
21 if (treeNodeLeft.val != treeNodeRight.val) {
22 return false;
23 }
24 //左节点往左走,右节点就往右走
25 left.offer(treeNodeLeft.left);
26 right.offer(treeNodeRight.right);
27 //左节点往右走,右节点就往左走
28 left.offer(treeNodeLeft.right);
29 right.offer(treeNodeRight.left);
30 } else {
31 return false;
32 }
33 }
34 return true;
35}
时间复杂度:O(n)
空间复杂度:O(n)
以上仅是个人思路解法,觉得还不错欢迎点赞关注分享
往期精彩推荐
以上是关于二叉树--对称二叉树的主要内容,如果未能解决你的问题,请参考以下文章