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