public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
//首先当两颗二叉树进来时,应该先判断是否为空
boolean result = false;
if(root1 == null|| root2 == null){
return false;
}
//判断两颗树的节点是否相等,相等的话就进入DoseTree1HaveTree2进行左右节点的比较判断
//若果不相等,将进行左右子树的遍历
if(root1.val == root2.val){
result = DoseTree1HaveTree2(root1,root2);
}
if(!result){
result = HasSubtree(root1.left,root2);
}
if(!result){
result = HasSubtree(root1.right,root2);
}
return result;
}
private boolean DoseTree1HaveTree2(TreeNode tree1,TreeNode tree2){
//判断是不是为空
if(tree1 == null && tree2 != null)
return false;
//结束条件,当tree2遍历完成时
if(tree2 == null)
return true;
if(tree1.val != tree2.val)
return false;
//最重要的一步,进行左右子树的判断。
return DoseTree1HaveTree2(tree1.left,tree2.left) && DoseTree1HaveTree2(tree1.right,tree2.right);
}
}
剑指offer,树的子结构
最新推荐文章于 2022-05-24 17:36:34 发布