题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路
判断当前节点的val是否相等,不相等就用A树的所有子节点比。
如果碰到相等的,就再比较当前的和B当前的节点以及子节点是否相等(递归)。
其中isEquals前面两个判断null,第一个是假如B树遍历结束了依旧没有返回false,则表明全部相等,true;第二个if是B树还没遍历完,但A树结束了,肯定就是false。
这两个递归太优雅了,给跪。。。
/**
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) {
if(root1==null || root2==null) return false;
boolean b = isEquals(root1,root2);
if(b){
return true;
}else{
return HasSubtree(root1.left,root2) || HasSubtree(root1.right,root2);
}
}
public boolean isEquals(TreeNode node1,TreeNode node2){
if(node2 == null) {
return true;
}
if(node1 == null) {
return false;
}
if(node1.val == node2.val){
return isEquals(node1.left,node2.left) && isEquals(node1.right,node2.right);
}else{
return false;
}
}
}