另一个树的子树
发布日期:2021-05-12 22:06:00 浏览次数:10 分类:精选文章

本文共 995 字,大约阅读时间需要 3 分钟。

题目描述:

给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看作它自身的一棵子树。

思路:

要判断 t 是否是 s 的子树,我们可以通过比较 s 的每一个节点及其子树结构与 t 是否匹配。一旦发现这样的结构,就可以确定 t 是 s 的子树。

具体来说,使用递归的方法来比较每一个节点及其对应的左右子树。递归终止的条件是遇到空值,或者当前节点的值与 t 对应节点的值不符。在递归中,我们需要比较两个节点的左右子树是否分别相同。如果其中有任何一个条件不满足,说明这些子树不相等,从而结束递归。否则,返回 true 表示两棵子树相同。

代码实现:

boolean isSameTree(TreeNode p, TreeNode q) {
if (p == null && q == null) return true;
if (p == null || q == null) return false;
if (p.val != q.val) return false;
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}
boolean isSubtree(TreeNode root, TreeNode subRoot) {
if (root == null) return false;
if (isSameTree(root, subRoot)) return true;
return isSubtree(root.left, subRoot) || isSubtree(root.right, subRoot);
}

代码解释:

首先,isSameTree 函数用于判断两个节点及其子树是否相同。通过递归比较两个节点的值以及左右子树的相对应节点是否相同,确保结构和值都一致。如果有任何不一致情况,返回 false;否则返回 true。

其次,isSubtree 函数用于检查给定根节点的树是否包含与子根节点的树完全相同的子树。递归地检查树中的每一个节点作为子树根的情况,如果找到与子根对应的子树,返回 true;否则,返回 false。

上一篇:平衡二叉树
下一篇:对称二叉树

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月23日 18时05分10秒