剑指offer17-树的子结构

剑指offer17-树的子结构

最近全国疫情严重,待在家里没事干,马上又要准备春招了,最近刷刷题,记录一下!再说一句,武汉加油,大家出门记得戴口罩!

1、题目描述

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

2、思路

要查找树A中是否存在和树B结构一样的子树,我们可以分为两步:第一步,在树A中找到和树B的根结点值一样的结点R;第二步,判断树A中以R为根结点的子树是不是包含和树B一样的结构,B树有的子节点,A树必须有;B树没有的子节点,A树可以有。
  对于这两步,第一步实际上就是树的遍历,第二步是判断是否有相同的结构,这两步都可以通过递归来实现。

3、代码

public class Solution {
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        /*
        1、寻找相同的根节点
     */
        if(root1==null||root2==null)
            return false;
        if(root1.val==root2.val && isContain(root1,root2))
            return true;
        return HasSubtree(root1.left,root2)||HasSubtree(root1.right,root2);
    }
    /*
        2、比较是否包含
     */
    public boolean isContain(TreeNode node1,TreeNode node2) {
        //我为空,你不为空,说明我不包含你
        if(node1==null&&node2!=null)
            return false;
        //咱两都空,等于值相同
        if(node2==null)
            return true;
        return node1.val==node2.val && isContain(node1.left,node2.left) && isContain(node1.right,node2.right);

    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章