树的子结构

题目

输入两颗二叉树A,B,判断B是不是A的子结构。

思路

  1. 首先在A树中进行遍历,找到值与B树相同的根节点
  2. 以A树中找到的根节点进行遍历,判断是否与B树有相同的结构
    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };*/
    class Solution {
    public:
        bool HasSubtree(TreeNode* root1, TreeNode* root2)
        {
            if(root1==nullptr||root2==nullptr)
                return false;
            
            bool res=false;
            if(root1->val==root2->val)
                res=hasSubTreeCore(root1,root2);
            if(!res)
                res=HasSubtree(root1->left,root2);
            if(!res)
                res=HasSubtree(root1->right,root2);
            
            return res;
        }
    private:
        bool hasSubTreeCore(TreeNode *r1,TreeNode *r2)
        {
            if(r2==nullptr)
                return true;
            if(r1==nullptr)
                return false;
            if(r1->val!=r2->val)
                return false;
            
            return hasSubTreeCore(r1->left,r2->left)&&hasSubTreeCore(r1->right,r2->right);
        }
    };
原文地址:https://www.cnblogs.com/tianzeng/p/10180232.html