对称二叉树
给你一个二叉树的根节点 root , 检查它是否轴对称。
小刘解题
对称二叉树:根节点的左、右子树是互为镜像的。
同时遍历二叉树的两个节点
class Solution {
public boolean isSymmetric(TreeNode root) {
return dfs(root,root);
}
//同时遍历两个节点(关于根节点对称的两个节点)
public boolean dfs(TreeNode leftNode,TreeNode rightNode){
//1、此处为递归函数的退出条件
//如果当前两个节点都为空,直接返回true
if(leftNode==null && rightNode==null){
return true;
}
//如果此时节点不对称(只有一个节点),直接返回false
if(leftNode==null || rightNode==null){
return false;
}
//2、开始进行递归
//当前节点及其子树是否对称
boolean flag1 = dfs(leftNode.left, rightNode.right);
boolean flag2 = dfs(leftNode.right, rightNode.left);
//3、单前节点要做的事情
//如果当前两个节点的值相等,并且左、右子树也为对称,返回true,否则返回false
return (leftNode.val== rightNode.val && flag1 && flag2);
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}