/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ /* 递归运算 注意各个if条件语句的先后顺序 */ public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { boolean result=false; //递归终止条件 if(root1!=null&&root2!=null){ //判断树1与树2的头结点相等吗 if(root1.val==root2.val){ result=subtreeIsEqual(root1,root2); } if(!result){ //判断树1的左子树与树2的子树相等吗 result=HasSubtree(root1.left,root2); } if(!result){ //判断树1的右子树与树2的子树相等吗 result=HasSubtree(root1.right,root2); } } return result; } public boolean subtreeIsEqual(TreeNode subroot1,TreeNode subroot2){ //递归终止条件 //先判断树2为空吗,因为subtreeIsEqual执行的条件是父节点的值分别相等 if(subroot2==null){ return true; } //再判断树1为空吗 if(subroot1==null){ return false; } //判断根节点 if(subroot1.val!=subroot2.val){ return false; }else{ return subtreeIsEqual(subroot1.left,subroot2.left)&&subtreeIsEqual (subroot1.right,subroot2.right); } } }