572. 另一个树的子树

leetcode 第七天

package com.furuisen.leecode;
/***
 * Definition for a binary tree node.
 *  * public class TreeNode {
 *  *     int val;
 *  *     TreeNode left;
 *  *     TreeNode right;
 *  *     TreeNode() {}
 *  *     TreeNode(int val) { this.val = val; }
 *  *     TreeNode(int val, TreeNode left, TreeNode right) {
 *  *         this.val = val;
 *  *         this.left = left;
 *  *         this.right = right;
 *  *     }
 *  * }
 */
public class IsSubtree {
     
    /***
     * 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。
     *
     * 来源:力扣(LeetCode)
     * 链接:https://leetcode-cn.com/problems/subtree-of-another-tree
     * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
     * @param s
     * @param t
     * @return
     */
    public boolean isSubtree(TreeNode s, TreeNode t) {
     
        if(s==null)
            return false;
        if (t==null)
            return true;

        if(isEqueal(s,t))
            return true;

        TreeNode left=s.left;
        TreeNode right=s.right;
        return isSubtree(left,t)||isSubtree(right,t);
    }

    private boolean isEqueal(TreeNode s, TreeNode t) {
     
        if(t==null&&s==null)
            return true;
        if(t==null||s==null)
            return false;
        if(s.val!=t.val){
     
            return false;
        }
        TreeNode sleft=s.left;
        TreeNode tleft=t.left;
        TreeNode sright=s.right;
        TreeNode tright=t.right;
        return isEqueal(sleft,tleft)&&isEqueal(sright,tright);
    }
}

你可能感兴趣的:(572. 另一个树的子树)