对称二叉树
问题陈述
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 例如,二叉树 [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
|
思路分析
考虑递归实现,先判断树是否为空,不空继续,递归判断其左结点和右结点是否相同。如果其左和右为空,返回true;如果左为空或者右为空或者左与右不相等,返回false;不空的话继续判断左的左和右的右,左的右和右的左。
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public class Symmetric_BinaryTree { public boolean isSymmetric(TreeNode root){ if(root==null) return true; return recurrison(root.left,root.right); } public boolean recurrison(TreeNode left,TreeNode right){ if(left==null&&right==null) return true; if(left==null||right==null||left.val!=right.val) return false; return recurrison(left.left,right.right)&&recurrison(left.right,right.left); }
public static void main(String[] args){ TreeNode root=new TreeNode(4); root.left=new TreeNode(3); root.right=new TreeNode(3); Symmetric_BinaryTree symmetric_binaryTree=new Symmetric_BinaryTree(); System.out.println(symmetric_binaryTree.isSymmetric(root)); } }
|