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

浙公网安备 33010602011771号