树二:树的子结构

/**
 * 题目:树的子结构
 * 描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
 * 解决方案:思路: 1.是子树分为三种情况①当前结点已经是子树了,②当前结点左孩子存在子树③当前结点右孩子存在子树
 *     2.判断是否是子树必须满足:结点值相等,左右节点的值也相等。

 *  从根节点开始,判断两个节点是否符合条件, 然后根节点的左子树、根节点的右子树; 
 * */

public class Two {
        
    public static boolean hasSubTree(TreeNode tree1,TreeNode tree2) {
            if(tree1 == null || tree2 == null) {
                return false;
            }
        return isSubTree(tree1, tree2)|| hasSubTree(tree1.left, tree2)  ||  hasSubTree(tree1.right,tree2);
    }
    public static boolean isSubTree(TreeNode tree1,TreeNode tree2) {
        if(tree2 == null) {
            return false;  //空树不是任意一个树的子结构  ,如果约定空树是子结构,返回true
        }
        if(tree1 == null) {
            return false;
        }
        if(tree1.var == tree2.var) {
            return isSubTree(tree1.left, tree2.left) && isSubTree(tree1.right,tree2.right);
        }else {
            return false;
        }
    }

    static class TreeNode{
        int var;
        TreeNode left;
        TreeNode right;
    }

}

 

posted @ 2018-11-16 15:13  弄潮儿儿  阅读(204)  评论(0编辑  收藏  举报