
作业社区
探索学习新天地,共享知识资源!
史啦啦 的学生作业:
练习1: // 计算二叉树的深度的递归函数 int maxDepth(TreeNode_t* root) { if (root == NULL) { return 0; // 空树的深度是0 } // 递归计算左子树和右子树的深度,取较大值,再加1(当前节点的深度) int leftDepth = maxDepth(root->left); int rightDepth = maxDepth(root->right); return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1; } 【图片】 练习2: // 冒泡排序函数 void bubbleSort(ListNode_t* head) { if (head == NULL || head->next == NULL) { return ; // 链表为空或只有一个节点,无需排序 } int swapped; ListNode_t* current; ListNode_t* last = NULL; do { swapped = 0; current = head; // 遍历链表进行一轮比较和交换 while (current->next != last) { if (current->value > current->next->value) { // 交换数据 int temp = current->value; current->value = current->next->value; current->next->value = temp; swapped = 1; // 标记发生了交换 } current = current->next; } last = current; // 最后一个已经排序的节点 } while (swapped); // 如果有交换,继续进行下一轮排序 } 【图片】 练习3: // 合并两个有序链表的函数 linknode_t* and_linklist(linknode_t* head1, linknode_t* head2) { // 创建一个虚拟头节点,用于暂存合并后的链表 linknode_t dummy; dummy.data = 0; dummy.next = NULL; linknode_t* tail = &dummy; // 遍历两个链表,比较节点值并合并 while (head1 != NULL && head2 != NULL) { if (head1->data < head2->data) { tail->next = head1; //将小的值插入临时的链表 head1 = head1->next; //移动第一个链表的指针 } else { tail->next = head2; head2 = head2->next; } tail = tail->next; //移动临时链表的指针 } // 将剩余的节点连接到结果链表 if (head1 != NULL) { tail->next = head1; } else { tail->next = head2; } return dummy.next; } 【图片】【图片】




