输入两棵二叉树A,B,判断B是不是A的子结构
(ps:我们约定空树不是任意一个树的子结构)
- 首先从根节点开始遍历
- 再分别从左子树和右子树遍历来判断B是不是A的子结构
public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
boolean result = false;
//当两棵树不为空
if(root1!=null&&root2!=null){
if(root1.val == root2.val){
result = doesTree1HaveTree2(root1,root2);
//从根节点开始比较
}
if(!result){
result = HasSubtree(root1.left,root2);
//如果根节点不符合,从左子树开始比较
}
if(!result){
result = HasSubtree(root1.right,root2);
//左子树不符合,就从右子树来判断是不是子结构
}
}
return result;
}
public static boolean doesTree1HaveTree2(TreeNode node1,TreeNode node2){
if(node2 == null){
return true;//若B与A的子树相等就返回true
}
if(node1 == null){
return false;//若B还没遍历完,A就遍历完了,表示false
}
if(node1.val!=node2.val){
return false;//若两颗树在比较时,有一个节点不相等,则返回false
}
return doesTree1HaveTree2(node1.left,node2.left)&&doesTree1HaveTree2(node1.right,node2.right);//如果根节点对的上,就去左右子树比较
}
}