文章

1

粉丝

0

获赞

1

访问

14

头像
树的子结构 题解:
P5375 复旦大学2023年机试题
发布于2026年2月27日 17:33
阅读数 14

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <queue>
  4. #include <vector>
  5. #include <string>
  6. using namespace std;
  7.  
  8. struct TreeNode{
  9. int val;
  10. TreeNode* left;
  11. TreeNode* right;
  12. TreeNode(int x):val(x),left(nullptr),right(nullptr){}
  13. };
  14.  
  15. // 判断以T1为根的树是否包含以T2为根的结构(从当前节点开始匹配)
  16. bool isSameStructure(TreeNode* T1, TreeNode* T2) {
  17. if (!T2) return true; // T2为空,说明T2已经匹配完,返回true
  18. if (!T1) return false; // T1为空但T2不为空,匹配失败
  19. if (T1->val != T2->val) return false; // 值不同,匹配失败
  20.  
  21. // 递归判断左右子树(注意:只比较T2存在的部分)
  22. return isSameStructure(T1->left, T2->left) && isSameStructure(T1->right, T2->right);
  23. }
  24.  
  25. // 判断B是不是A的子结构
  26. bool isSubStructure(TreeNode* A, TreeNode* B) {
  27. if (!A || !B) return false; // 约定空树不是任意一个树的子结构
  28.  
  29. // 如果当前节点值相同,判断是否包含B的结构
  30. if (A->val == B->val && isSameStructure(A, B)) {
  31. return true;
  32. }
  33.  
  34. // 否则递归在左右子树中查找
  35. return isSubStructure(A->left...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发