题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
答案
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;
}
if(node1==null){
return false;
}
if(node1.val==node2.val){
return doesTree1HaveTree2(node1.left,node2.left)&&doesTree1HaveTree2(node1.right,node2.right);
}
return false;
}
}
分析
- 遍历A树,找到跟B树根节点相等的结点
- 将这两个结点扔进判断函数做判断
- 判断函数优先判断B树是否遍历结束,结束则说明包含
- 再判断A树是否遍历结束,结束则说明不包含
- 如果相等则继续递归,直到结果出来
- 返回HasSubtree函数,如果发现不包含,继续向左子树和右子树遍历,继续找新的跟B树根节点相等的结点,重复以上步骤
Comments | NOTHING