第20日:对称二叉树
题目链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xn7ihv/
题目:
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
进阶:
你可以运用递归和迭代两种方法解决这个问题吗?
相关标签 树、深度优先搜索、广度优先搜索、二叉树
解题:
-
使用递归
大致思路:
在比较时肯定要对称结点进行比对,之所以肯定要知道左右节点指针。
那么要定义一个方法,传入两个参数(对称的两个结点),
也就是说刚开始调用时传入的是根节点的左子节点和右子节点;
然后在方法内分别调用两次递归方法(因为每个结点的子节点有两个对称位置)。
详细代码如下:
public boolean isSymmetric(TreeNode root) { if (root==null) return true; return isSymmetric(root.left,root.right); } boolean isSymmetric(TreeNode left,TreeNode right){ //如果左右节点同时不存在,也是对称返回true if (left==null&&right==null) return true; //如果只有一个结点存在,或者两值不相等表示不对称返回false if (left==null||right==null||left.val!=right.val) return false; //继续递归 return isSymmetric(left.left,right.right)&&isSymmetric(left.right,right.left); }