牛客网-剑指offer-17-树的子结构

来源:互联网 发布:淘宝魔兽带团本 编辑:程序博客网 时间:2024/06/16 22:09
时间限制:1秒 空间限制:32768K 热度指数:157897
 算法知识视频讲解

题目描述

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)


/**
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;
        }
        return find(root1, root2);
    }


    private boolean find(TreeNode root1, TreeNode root2) {
        if (root1 == null && root2 == null) {
            return true;
        } else if (root1 == null || root2 == null) {
            return false;
        }
        if (root1.val == root2.val) {
            boolean flag = equal(root1, root2);
            if (flag) {
                return true;
            }
        }
        boolean flag1 = false;
        if (root1.left != null)
            flag1 = find(root1.left, root2);
        boolean flag2 = false;
        flag2 = find(root1.right, root2);
        return flag1 | flag2;
    }


    private boolean equal(TreeNode root1, TreeNode root2) {
        if (root2 == null) {
            return true;
        }
        if (root1 == null) {
            return false;
        }
        if (root1.val == root2.val) {
            boolean flag1 = equal(root1.left, root2.left);
            boolean flag2 = equal(root1.right, root2.right);
            return flag1 & flag2;
        }
        return false;
    }
}