判断a树是否是b树的子树

/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    //分为两个函数,一个用于遍历节点当做子树的根节点,另一个用于判断是否是子树(必须要root2先空)
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        if(root1==null||root2==null)
            return false;
        //此处用到一个技巧,直接判断isSubtree(root1,root2),并且采取||的方式确定结果。
        return isSubtree(root1,root2)||HasSubtree(root1.left,root2)||HasSubtree(root1.right,root2);
        
    }
    
    public boolean isSubtree(TreeNode root1,TreeNode root2){
        if(root2==null)
            return true;
        if(root1==null)
            return false;
        if(root1.val==root2.val)
            return isSubtree(root1.left,root2.left)&&
            isSubtree(root1.right,root2.right);
        else{
            return false;
        }
    }
}

思路很巧妙,代码简介了不少,但还是要多练习,
做了2、3遍了还是会忘记一些判断手法。
共勉。

9.21:用到了两次递归,一个是HasSubtree,一个是isSubTree。

    原文作者:B树
    原文地址: https://blog.csdn.net/not_in_mountain/article/details/77978850
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞