题目描述
输入两颗二叉树A,B,判断B是不是A的子结构(我们约定空树不是任一一个树的子结构)
解题思路
见代码注解
/**
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) {
boolean result = false;
// 当其中有一个为空的时候,都不满足条件
if(root1 != null && root2 != null){
// 如果两个根节点都是相等的话,那么满足条件,判断是否B是A的子结构
// 如果不是继续走下面的条件
if(root1.val == root2.val)
result = isSun(root1, root2);
// 当目前节点不满足条件的话,先遍历左子树,是否有满足条件的
// 没有的话就走下一个条件
if(!result)
result = HasSubtree(root1.left, root2);
// 当左子树的节点都不满足子结构的要求的话,那么遍历根节点的右子树,
if(!result)
result = HasSubtree(root1.right, root2);
}
return result;
}
public boolean isSun(TreeNode root1, TreeNode root2){
// 如果root2走完了那么直接返回 是
if(root2 == null) return true;
//如果root2还没走完,root1就走完了
// 显而易见,这两个树不是子结构关系
if(root1 == null) return false;
if(root1.val != root2.val) return false;
// 如果不满足上面的条件,说明目前的节点还是满足子结构的,继续遍历
return isSun(root1.left, root2.left) && isSun(root1.right, root2.right);
}
}
以上就是这道题的解法