树的子结构

  判断一棵树是不是另一棵树的子结构其实逻辑还是比较清晰的,假设判断A是是不是B的子结构。显然为真的条件是

以B树中任意一个节点为根的树和A可以进行匹配就为真。

  

 public static boolean dfs(TreeNode root1, TreeNode root2) {
        if (root1 != null && root2 == null) {
            return false;
        }
        if (root1 != null) {
            if (root1.val != root2.val) {
                return false;
            } else {
                return dfs(root1.left, root2.left) && dfs(root1.right, root2.right);
            }
        }
        return true;
    }

  代码思路如上图所示

然后对B树进行遍历即可

 /**
     * 这个函数是判断root2是不是root1的子结构
     * @param root1
     * @param root2
     * @return
     */
    public static boolean HasSubtree(TreeNode root1, TreeNode root2) {
        if (root2 == null) {
            return false;
        }
        if (root1 != null) {
            if (dfs(root2, root1)) {
                return true;
            }
            return HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2);
        }
        return false;
    }

  

 

posted @ 2019-11-24 22:18  小小小小的我  阅读(169)  评论(0编辑  收藏  举报