题目
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
样例
思路分析
采用左右两个节点,同时向下递归进行判断
代码实现
package 剑指offer.搜索与回溯.offer28;
public class Solution {
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
TreeNode() {
}
}
/**
* 思路分析:
* 第一种:直接构建他的镜像树,然后逐一遍历是否相同
*
* 第二种:直接遍历各个节点,镜像树交换后,再与原来的值进行比较。
*
*
* 第三种:采用递归,使用两个节点,一个从左出发,一个从右出发,走的方向是相反的来进行递归
* @param root
* @return
*/
public boolean isSymmetric(TreeNode root) {
if(root == null){
return true;
}
boolean bfs = bfs(root.left, root.right);
return bfs;
}
public boolean bfs(TreeNode L,TreeNode R){
if(L == null&& R == null){
return true;
}
if(L == null && R != null){
return false;
}
if(L != null && R == null){
return false;
}
//就是当前节点不满足则直接返回false
if(!(L.val == R.val)){
return false;
}
//这一步:从step1-step2,L向左递归完成,R向右递归完成
Boolean res1 = bfs(L.left,R.right);
//这一步:完成step3
Boolean res2 = bfs(L.right,R.left);
//脑海模拟后续流程,能成功完成后续
return res1&res2;
}
}