剑指offer 面试题26 树的子结构

1.题目

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

 

2.思路

这个题主要分两步:
    第一步是在以s为根节点的树中寻找和t相等的节点。
    找到这个节点之后,判断以这两个节点为根节点的子树是否相同
    没找到就继续寻找。

 

3.题解

class Solution {
public:
    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
    {
        
        if(pRoot1 == nullptr || pRoot2 == nullptr)
            return false;
        
        bool res = false;
        if(pRoot1->val == pRoot2->val)
            res = isSame(pRoot1, pRoot2);
        if(!res)
            res = HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2);

        return res;
            
        
    }
    
       bool isSame(TreeNode* s, TreeNode* t)
    {
        if(t == nullptr)
            return true;
        if(s == nullptr)
            return false;
        if(s->val != t->val)
            return false;
        return isSame(s->left, t->left) && isSame(s->right, t->right);
             
    }
};

 

4.相似题目

LeetCode 572. Subtree of Another Tree 树的子结构

猜你喜欢

转载自blog.csdn.net/u014128608/article/details/92849446