设计一个算法,以求出给定排序树中值为最大的结点。C语言
时间: 2023-10-31 13:04:20 浏览: 80
同样的,可以采用二叉搜索树中序遍历的方式来实现这个算法。以下是使用递归实现的 C 语言代码:
```C
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode* findMaxNode(struct TreeNode* root) {
if (root == NULL) {
return NULL;
}
if (root->right != NULL) {
return findMaxNode(root->right);
}
return root;
}
```
在这个代码中,如果当前节点有右子节点,则递归遍历右子树,直到找到最右边的节点,即值最大的节点。如果当前节点没有右子节点,则当前节点就是值最大的节点。
需要注意的是,这里的 `struct TreeNode` 是二叉搜索树节点的结构体定义,可能需要根据实际情况进行修改。
相关问题
对给定的单链表 L ,设计一个算法,删除 L 中值为 x 的结点的直接前驱结点。C语言
struct ListNode {
int val;
struct ListNode *next;
};
void deletePreNode(struct ListNode *head, int x) {
struct ListNode *p = head;
while (p->next != NULL) {
if (p->next->val == x) {
struct ListNode *pre = p->next;
p->next = pre->next;
free(pre);
return;
}
p = p->next;
}
}
对给定的单链表 L ,设计一个算法,删除 L 中值为 x 的结点的直接前驱结点的c语言代码
以下是删除 L 中值为 x 的结点的直接前驱结点的 C 语言代码:
```c
struct ListNode* deletePredecessor(struct ListNode* head, int x) {
struct ListNode* curr = head;
struct ListNode* prev = NULL;
while (curr != NULL) {
if (curr->next != NULL && curr->next->val == x) {
if (prev == NULL) {
head = curr->next;
} else {
prev->next = curr->next;
}
free(curr);
break;
}
prev = curr;
curr = curr->next;
}
return head;
}
```
阅读全文