• 树的子结构


      判断一棵树是不是另一棵树的子结构其实逻辑还是比较清晰的,假设判断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;
        }
    

      

  • 相关阅读:
    linux 第五天
    linux 第四天
    二进制 位运算
    二进制
    java 方法的调用过程
    Linux 第三天
    Linux 第二天
    Linux
    学习了半个多月的TankGame
    学习第一天(spring)
  • 原文地址:https://www.cnblogs.com/shaomys/p/11924779.html
Copyright © 2020-2023  润新知