java 对称二叉树的判断
1.题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
2.解题思路
可以按照类似层次遍历,来判断是否是堆成二叉树:
首先根节点以及其左右子树,左子树的左子树和右子树的右子树相同,以及左子树的右子树和右子树的左子树相同即可,然后采用递归一直判断下去。
3.代码
publicclassisSymmetrical{
publicstaticvoidmain(String[]args){
//新建一棵二叉搜索树
TreeNoderoot=newTreeNode(10);
TreeNoden1=newTreeNode(5);
TreeNoden2=newTreeNode(5);
TreeNoden3=newTreeNode(4);
TreeNoden4=newTreeNode(7);
TreeNoden5=newTreeNode(7);
TreeNoden6=newTreeNode(4);
//TreeNoden7=newTreeNode(19);
root.left=n1;
root.right=n2;
n1.left=n3;
n1.right=n4;
n2.left=n5;
n2.right=n6;
//n6.right=n7;
System.out.println("后序遍历:");
postOrderTraverse(root);
booleantemp=symmetrical(root);
System.out.println("\n"+"结果:"+temp);
}
staticbooleansymmetrical(TreeNodepRoot)
{
if(pRoot==null){
returntrue;
}
returncomRoot(pRoot.left,pRoot.right);
}
staticbooleancomRoot(TreeNodeleft,TreeNoderight){
if(left==null)
returnright==null;
if(right==null)
returnfalse;
if(left.val!=right.val)
returnfalse;
returncomRoot(left.right,right.left)&&comRoot(left.left,right.right);
}
//后序遍历
publicstaticvoidpostOrderTraverse(TreeNodenode){
if(node==null)
return;
postOrderTraverse(node.left);
postOrderTraverse(node.right);
System.out.print(node.val+"");
}
}
运行:
后序遍历:
47574510
结果:true
到此这篇关于java对称二叉树的判断的文章就介绍到这了,更多相关java对称二叉树内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。