树的子结构
题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
1 public boolean HasSubtree(TreeNode root1, TreeNode root2) { 2 boolean res = false; 3 if(root2!=null&&root1!=null) { 4 if (root1.val == root2.val) 5 //注意这里不能直接返回,因为即使root1的值等于root2了, 6 // 从根节点开始遍历时,最终若是不满足B为A的子树。但这不能说明B就真的不是A的子树了,因为还可能存在有其他节点值 7 //和root2的根节点值相同,可以从那里开始找 8 res = helper(root1,root2); 9 if(!res) 10 /* 11 两种情况:(1)根节点值相等,但是后续不满足条件 12 (2)根节点值就已经不相等了,直接在A树种继续找和B树根节点值相等的节点 13 */ 14 res = HasSubtree(root1.left,root2)||HasSubtree(root1.right,root2); 15 } 16 return res; 17 } 18 19 private boolean helper(TreeNode root1, TreeNode root2) { 20 if(root2==null) 21 return true; 22 else { 23 if (root1 == null) return false; 24 } 25 if(root1.val!=root2.val) 26 return false; 27 return helper(root1.left,root2.left)&&helper(root1.right,root2.right); 28 }