树的子结构 题解:
- #include <cstdio>
- #include <iostream>
- #include <queue>
- #include <vector>
- #include <string>
- using namespace std;
-
- struct TreeNode{
- int val;
- TreeNode* left;
- TreeNode* right;
- TreeNode(int x):val(x),left(nullptr),right(nullptr){}
- };
-
- // 判断以T1为根的树是否包含以T2为根的结构(从当前节点开始匹配)
- bool isSameStructure(TreeNode* T1, TreeNode* T2) {
- if (!T2) return true; // T2为空,说明T2已经匹配完,返回true
- if (!T1) return false; // T1为空但T2不为空,匹配失败
- if (T1->val != T2->val) return false; // 值不同,匹配失败
-
- // 递归判断左右子树(注意:只比较T2存在的部分)
- return isSameStructure(T1->left, T2->left) && isSameStructure(T1->right, T2->right);
- }
-
- // 判断B是不是A的子结构
- bool isSubStructure(TreeNode* A, TreeNode* B) {
- if (!A || !B) return false; // 约定空树不是任意一个树的子结构
-
- // 如果当前节点值相同,判断是否包含B的结构
- if (A->val == B->val && isSameStructure(A, B)) {
- return true;
- }
-
- // 否则递归在左右子树中查找
- return isSubStructure(A->left...
登录后发布评论
暂无评论,来抢沙发