栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

medium 剑指 Offer 树的子结构 遍历递归

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

medium 剑指 Offer 树的子结构 遍历递归


遍历递归: c++
class Solution {
public:
    bool isSubStructure(TreeNode* A, TreeNode* B) {
        // A B 树空
        if(A == nullptr || B == nullptr){
            return false;
        }
        return iscontain(A, B) || isSubStructure(A->left, B) || isSubStructure(A->right, B);  // 先判断当前遍历的两个节点开始的树一样吗, 不一样则继续判断主树A的下一个节点(左、右节点)
    }
private:
    bool iscontain(TreeNode* A, TreeNode* B){
        if(B == nullptr){
            return true;  // B树节点比较完毕,配对
        }
        if(A == nullptr || A->val != B->val){
            return false;  // B树节点不为空但A树节点已为空,或两数节点都不为空,但值不同,不配对
        }

        return iscontain(A->left, B->left) && iscontain(A->right, B->right); // 当前节点比较完毕,比较下一个节点(A树左节点与B树左节点相同 且 A树右节点与B树右节点相同)
    } 
};

python
class Solution:
    def isSubStructure(self, A: TreeNode, B: TreeNode) -> bool:
        def isContain(A, B):
            if not B:
                return True
            if not A or A.val != B.val:
                return False

            return isContain(A.left, B.left) and isContain(A.right, B.right)

        if not A or not B:
            return False

        return isContain(A, B) or self.isSubStructure(A.left, B) or self.isSubStructure(A.right, B)  # 继续找A的节点,直到与B的根配对


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/530120.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号