题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
分析:两棵树A 和B,判断B是不是A的子树,分为三种情况,一,A的根和B的根相同,则继续比较A的左子树与B的左子树,A的右子树与B的右子树。二,若A的根和B的根不同,这比较B是不是在A的左子树中,三,比较B是不是在A的右子树中。代码如下:
1 /** 2 public class TreeNode { 3 int val = 0; 4 TreeNode left = null; 5 TreeNode right = null; 6 7 public TreeNode(int val) { 8 this.val = val; 9 10 } 11 12 } 13 */ 14 public class Solution { 15 public boolean HasSubtree(TreeNode root1,TreeNode root2) { 16 boolean res = false ; 17 if(root1!=null&&root2!=null){ 18 if(root1.val==root2.val){ 19 res = doesHas(root1,root2); 20 } 21 if(!res){ 22 res = HasSubtree(root1.left,root2) ; 23 } 24 if(!res){ 25 res = HasSubtree(root1.right,root2) ; 26 } 27 } 28 return res ; 29 } 30 private boolean doesHas(TreeNode root1, TreeNode root2) { 31 if(root2==null){ 32 return true ; 33 } 34 if(root1==null){ 35 return false ; 36 } 37 if(root1.val!=root2.val){ 38 return false ; 39 } 40 41 return doesHas(root1.left,root2.left)&&doesHas(root1.right,root2.right); 42 } 43 }
时间: 2024-10-24 13:14:25