• 相同的树(C++解法)


    题目

    给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

    如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

    示例 1:

    输入:p = [1,2,3], q = [1,2,3]
    输出:true
    

    示例 2:

    输入:p = [1,2], q = [1,null,2]
    输出:false
    

    示例 3:

    输入:p = [1,2,1], q = [1,1,2]
    输出:false

    C++代码

    1. #include
    2. using namespace std;
    3. //定义二叉树结构体
    4. struct TreeNode {
    5. int val;
    6. TreeNode* left;
    7. TreeNode* right;
    8. TreeNode() : val(0), left(nullptr), right(nullptr) {}
    9. TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    10. TreeNode(int x, TreeNode* left, TreeNode* right): val(x), left(left), right(right) {}
    11. };
    12. /*
    13. * 相同的树问题
    14. * 分四种情况,如果两棵树都为空,则返回true
    15. * 如果只有一棵树为空,返回false
    16. * 如果两棵树的根节点值不同,返回false
    17. * 如果两棵树不为空且值相同,迭代判断左右子树是否相同
    18. */
    19. bool isSameTree(TreeNode* p, TreeNode* q) {
    20. if (q == nullptr && q == nullptr) {
    21. return true;
    22. }
    23. else if (q == nullptr || q == nullptr) {
    24. return false;
    25. }
    26. else if (q->val != q->val) {
    27. return false;
    28. }
    29. else {
    30. return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
    31. }
    32. }
    33. int main() {
    34. TreeNode* p1 = new TreeNode(1);
    35. TreeNode* p2 = new TreeNode(2);
    36. TreeNode* p3 = new TreeNode(3);
    37. TreeNode* q1 = new TreeNode(1);
    38. TreeNode* q2 = new TreeNode(2);
    39. TreeNode* q3 = new TreeNode(3);
    40. p1->left = p2;
    41. p1->right = p3;
    42. p2->left = nullptr;
    43. p2->right = nullptr;
    44. p3->left = nullptr;
    45. p3->right = nullptr;
    46. q1->left = q2;
    47. q1->right = q3;
    48. q2->left = nullptr;
    49. q2->right = nullptr;
    50. q3->left = nullptr;
    51. q3->right = nullptr;
    52. TreeNode* p = p1;
    53. TreeNode* q = q1;
    54. bool ans = isSameTree(p, q);
    55. cout << boolalpha << ans << endl;
    56. delete p1, p2, p3, q1, q2, q3;
    57. return 0;
    58. }

    分析

    相同的树问题,分四种情况,如果两棵树都为空,则返回 true,如果只有一棵树为空,返回 false,如果两棵树的根节点值不同,返回 false,如果两棵树不为空且值相同,迭代判断左右子树是否相同。

  • 相关阅读:
    七、python ConfigParser模块
    利用Aspose.Word对Word文件添加印章处理以及实现业务数据的替换处理
    五、伊森商城 前端基础-Vue p24
    JavaWeb 学习笔记 6:会话跟踪
    STM32CubeMX学习笔记(2)--DSP库的使用
    【Linux】Jetson nano 使用记录,安装torch1.8、yolov5 tensorrt加速、java等
    5、Mybatis-Plus 常用注解
    学信息系统项目管理师第4版系列35_补遗
    Day710.文字块-Java8后最重要新特性
    【容器化】Docker
  • 原文地址:https://blog.csdn.net/m0_62275194/article/details/134267016