【题目描述】
【思路】
与两个字符串匹配类似的
1、 A中的每一个节点都有可能是树B的根节点,枚举A的每一个节点只要非空,就以该节点为根跟B树进行匹配比较。
2、 然后同时遍历B数和以A中某个节点为根的树,判断是否一致。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean hasSubtree(TreeNode pRoot1, TreeNode pRoot2) {
//有空树
if( pRoot1 == null || pRoot2 == null) return false;
if( isSame(pRoot1, pRoot2)) return true;
return hasSubtree(pRoot1.left,pRoot2) || hasSubtree(pRoot1.right, pRoot2);
}
public boolean isSame(TreeNode root1, TreeNode root2){
//B 树为空了说明匹配
if( root2 == null) return true;
//A树为空且B树还没遍历完 或者 两树都不为空但值没有匹配上
if( root1 == null || root1.val != root2.val) return false;
//递归判断
return isSame(root1.left, root2.left) && isSame(root1.right, root2.right);
}
}