剑指offer---17--****-(递归)树的子结构

 
题意
 
分析
方法一
分为两步走:另外写一个函数,这个函数用在当根节点的参数值相同的情况下,判断第一个树是否包含了第二个树
1.判断当前点是否相同,如果相同就去比较左右子树是否相同
2.如果当前节点不相同,那么就去比较左子树是否包含第二棵树。
 
 
代码
/**
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 result = false;
        //如果根节点相等,比较是否是包含关系
        if(root1.val == root2.val){
            result = doesTree1HaveTree2(root1,root2);
        }
        //然后判断如果根节点参数值不相等
        if(result==false){
            result = HasSubtree(root1.left,root2);
        }
        if(result == false){
            result = HasSubtree(root1.right,root2);
        }
        return result;
    }
    
    //这个函数表示当根节点相同的情况下,左右子树是否匹配。
    public boolean doesTree1HaveTree2(TreeNode root1,TreeNode root2){
           if(root2 == null)return true;//已经匹配完了,就是第二棵树已经结束了
        if(root1 == null)return false;//还没有匹配完
        if(root1.val != root2.val)return false;
        return doesTree1HaveTree2(root1.left,root2.left)&&doesTree1HaveTree2(root1.right,root2.right);
    }
}
posted @ 2018-07-27 13:21  buptyuhanwen  阅读(119)  评论(0编辑  收藏  举报