判断一个树结构是否包含另一个树

//思路是使用递归,若根节点相等,则比较左右子树是否相等,否则分别判断该树的左子树或右子树是否包含原来的树,两者有一个为真即可
//具体实现代码如下
class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}

public class Cat {
    public boolean HasSubtree(TreeNode root1, TreeNode root2) {
        if (root2 == null || root1 == null) {
            return false;
        }



        return isHastree(root1,root2,root2);
    }

    public boolean isHastree(TreeNode Node1,TreeNode Node2,TreeNode root2) {
        if (Node2 == null) {
            return true;
        }
        if (Node1 == null && Node2 != null) {
            return false;
        }
        //假设两个都有 若节点值相等
        if (Node1.val == Node2.val) {
            //判断两个左右节点值是否相等
            boolean flag = isHastree(Node1.left, Node2.left, root2) && isHastree(Node1.right, Node2.right, root2);
            //若两树的左子树与右子树不想等 判断 右子树 或左子树是否包含root2
            if (!flag) {
                return isHastree(Node1.right, root2, root2) || isHastree(Node1.left, root2, root2);
            }
            //左右子树相等
            return  flag;
        }
        //两个子树根节点不相等,断 右子树 或左子树是否包含root2
            return isHastree(Node1.right, root2, root2) || isHastree(Node1.left, root2, root2);


        // 若不想等 左右子树有一个包含该树即可


    }


}


猜你喜欢

转载自blog.csdn.net/qq_32459653/article/details/81165709
今日推荐