题目
输入两颗二叉树A,B,判断B是不是A的子结构。
思路
- 首先在A树中进行遍历,找到值与B树相同的根节点
- 以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); } };