您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页剑指LeetCode 剑指offer26

剑指LeetCode 剑指offer26

来源:爱go旅游网

本人新手为了面试互联网公司,将刷题做一个记录以及总结,方便之后学习!!

第22道问题 剑指offer 26为一道中等题

题目:

 1.自己思路,要找b是否为a的子树,需要比较当b的根节点与a的根节点相同时,还需要比较左右节点。此题也是参考了题解。之前一直没做对,看了题解之后打开了思路。

使用两次递归。

1.递归b是a的子树,b是a的左子树的子树,或者b是a的右子树的子树。目标就是找到相同的根节点。

2.二次递归就是子树的所有节点与a进行对照,看是否完全一样,否则为false。

class Solution {
    public boolean isSubStructure(TreeNode A, TreeNode B) {
        if(B == null || A == null){
            return false;
        }
        //第一次递归
        return dfs(A,B)||isSubStructure(A.left,B) ||isSubStructure(A.right,B);
    }
    public boolean dfs(TreeNode a,TreeNode b){
        if(b == null){//说明没有b了
           return true;
        }

        if(a == null){//a不能与b相对应。
            return false;
        }
        //a,b分别为根节点,其他的也都相等,二次递归
        return a.val ==b.val && dfs(a.left,b.left) && dfs(a.right,b.right);
    }
}

结果:

总结:

1.对二叉树的变量以及相应的算法了解比较少。

2.递归使用的不熟练。 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务