题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路:
1.先判断root1的根节点和root2的根节点是否相同
2.若是不相同,则递归遍历root1的左右子树,直到找到一个节点与root2的根节点相同
3.若是相同,则依次遍历左右节点,查看root1是否包含root2(注意,对应的点root2存在,root1必存在且值与root2相等,root2不存在,root1可以存在也可以不存在)
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { //先找pRoot1中是否含有pRoot2的根节点 boolean flag = false; if(root1!=null&&root2!=null) { if(root1.val == root2.val) flag = IsSame(root1,root2); if(!flag) flag = HasSubtree(root1.left,root2); if(!flag) flag = HasSubtree(root1.right,root2); } return flag; } public boolean IsSame(TreeNode root1, TreeNode root2) { //判断以pRoot1为根节点的树是否包含以pRoot2为根节点的树 if(root2==null) //root2可以为空 return true; if(root1==null && root2!=null) return false; if(root1.val == root2.val) { return IsSame(root1.left, root2.left)&&IsSame(root1.right, root2.right); } return false; } }