问题
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
算法
代码
package ATree;
/**
* @Author Zhou jian
* @Date 2020 ${month} 2020/3/13 0013 17:17
* 请实现一个函数,用来判断一颗二叉树是不是对称的。
* 注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
*/
public class Problem3 {
//大”一点的对称二叉树,然后按树的一层一层比较一下,看看怎么算是满足对称的二叉树,
boolean isSymmetrical(TreeNode1 pRoot)
{
return judge(pRoot.left,pRoot.right);
}
public boolean judge(TreeNode1 node1,TreeNode1 node2){
//节点都为空则返回true
if(node1==null&&node2==null){
return true;
}
//
if(node1==null||node2==null){
return false;
}
//节点的值不相等,则直接返回false
if(node1.val!=node2.val){
return false;
}else{
//节点相等,则接着比较
//
return judge(node1.left,node2.right)&&judge(node1.right,node2.left);
}
}
public static void main(String[] args) {
TreeNode1 A = new TreeNode1("A");
TreeNode1 B = new TreeNode1("B");
TreeNode1 B1 = new TreeNode1("B");
TreeNode1 D = new TreeNode1("D");
TreeNode1 D1 = new TreeNode1("D");
TreeNode1 G = new TreeNode1("G");
TreeNode1 G1 = new TreeNode1("G");
A.left=B;
A.right=B1;
B.left=D;
B1.right=D1;
D.right=G;
D1.left=G1;
Problem3 problem3=new Problem3();
System.out.println(problem3.isSymmetrical(A));
}
}
class TreeNode1 {
String val ;
TreeNode1 left = null;
TreeNode1 right = null;
public TreeNode1(String val) {
this.val = val;
}
}