剑指offer JZ17 树的子结构
发布日期:2021-05-07 13:14:30 浏览次数:15 分类:技术文章

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

树的子结构

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

输入

{8,8,#,9,#,2,#,5},{8,9,#,2}
输出
true

思路

突破点

若A、B树根节点值相等,判断B左右子树是否均为A的子结构
若A、B树根节点值不相等,判断B是否为A的左子树或右子树

代码

public boolean HasSubtree(TreeNode root1,TreeNode root2) {        if(root1==null||root2 == null) return false;        if(root1.val == root2.val && comp(root1.left,root2.left) && comp(root1.right,root2.right))            return true;        return HasSubtree(root1.left,root2)||HasSubtree(root1.right,root2);    }        public boolean comp(TreeNode root1,TreeNode root2){        if(root2==null) return true; //B为空,不管A是否为空都是子结构        if(root1==null) return false;                if(root1.val==root2.val){ //如果相等,继续判断            return comp(root1.right,root2.right)&&comp(root1.left,root2.left);        } else{            return false;        }    }
上一篇:剑指offer JZ18二叉树的镜像
下一篇:剑指offer JZ16 合并两个排序的链表

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2025年03月18日 22时36分25秒