飞道的博客

【LeetCode】剑指 Offer(9)

333人阅读  评论(0)

目录

题目:剑指 Offer 25. 合并两个排序的链表 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过啦!!!

题目:剑指 Offer 26. 树的子结构 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过啦!!!

写在最后:


题目:剑指 Offer 25. 合并两个排序的链表 - 力扣(Leetcode)

题目的接口:


  
  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode(int x) : val(x), next(NULL) {}
  7. * };
  8. */
  9. class Solution {
  10. public:
  11. ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
  12. }
  13. };

解题思路:

我的思路是用一个简单的归并思想,

两个链表对比,

值小的就提取出来,

最后集合成一个新链表。

代码:


  
  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode(int x) : val(x), next(NULL) {}
  7. * };
  8. */
  9. class Solution {
  10. public:
  11. ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
  12. //建一个哨兵位的头结点
  13. ListNode* head = new ListNode( 0);
  14. //新链表的头指针
  15. ListNode* cur = head;
  16. //归并
  17. while(l1 && l2)
  18. {
  19. if(l1->val < l2->val)
  20. {
  21. cur->next = l1;
  22. l1 = l1->next;
  23. }
  24. else
  25. {
  26. cur->next = l2;
  27. l2 = l2->next;
  28. }
  29. cur = cur->next;
  30. }
  31. //如果有一个链表遍历完了,那就
  32. //直接用新链表的尾将剩下的那个链表接上
  33. cur->next = (l1 == nullptr ? l2 : l1);
  34. //返回新链表的头
  35. return head->next;
  36. }
  37. };

过啦!!!

题目:剑指 Offer 26. 树的子结构 - 力扣(Leetcode)

题目的接口:


  
  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8. * };
  9. */
  10. class Solution {
  11. public:
  12. bool isSubStructure(TreeNode* A, TreeNode* B) {
  13. }
  14. };

解题思路:

有关二叉树的遍历,一般就想到递归,

用递归遍历整个A树,

然后用每个根节点与B树比较,

如果递归到空,节点的值都相等,就返回true。

代码:


  
  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8. * };
  9. */
  10. class Solution {
  11. public:
  12. bool is_SubStructure(TreeNode* A, TreeNode* B)
  13. {
  14. //如果递归到空节点,证明B是A的子结构
  15. if(B == nullptr)
  16. {
  17. return true;
  18. }
  19. //如果A走到空节点,或者不相等,返回false
  20. if(A == nullptr || A->val != B->val)
  21. {
  22. return false;
  23. }
  24. //比较左孩子和右孩子
  25. return is_SubStructure(A->left, B->left) && is_SubStructure(A->right, B->right);
  26. }
  27. bool isSubStructure(TreeNode* A, TreeNode* B) {
  28. //判断树是否为空
  29. if(A == nullptr || B == nullptr)
  30. {
  31. return false;
  32. }
  33. //递归比较节点 //遍历二叉树
  34. return is_SubStructure(A, B) || isSubStructure(A->left, B) || isSubStructure(A->right, B);
  35. }
  36. };

过啦!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果喜欢本文的话,欢迎点赞和评论,写下你的见解。

如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。

之后我还会输出更多高质量内容,欢迎收看。


转载:https://blog.csdn.net/Locky136/article/details/129178678
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场