假设二叉树中的每个结点值为单个字符,采用二叉链储存结构储存。设计一个算法求二叉树b中最小值的结点值完整代码
时间: 2024-03-02 20:52:08 浏览: 80
假设二叉树采用链接存储结构存储,设计一个算法,求二叉树b的宽度.pdf
以下是求二叉树最小值结点值的完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode, *TreeNodePtr;
// 创建二叉树
TreeNodePtr createTree() {
char ch;
TreeNodePtr root;
scanf("%c", &ch);
if (ch == '#') {
root = NULL;
} else {
root = (TreeNodePtr) malloc(sizeof(TreeNode));
root->data = ch;
root->left = createTree();
root->right = createTree();
}
return root;
}
// 查找最小值结点
TreeNodePtr findMinNode(TreeNodePtr root) {
if (root == NULL) {
return NULL;
}
while (root->left != NULL) {
root = root->left;
}
return root;
}
int main() {
TreeNodePtr root = createTree();
TreeNodePtr minNode = findMinNode(root);
if (minNode != NULL) {
printf("The minimum value node is: %c\n", minNode->data);
} else {
printf("The tree is empty!\n");
}
return 0;
}
```
该程序中,我们首先定义了一个二叉树结点的结构体,包含字符数据、左子树指针和右子树指针。然后定义了创建二叉树的函数 `createTree()`。在该函数中,我们输入一个字符,如果该字符为 '#',则返回 NULL,否则创建一个新结点,将该字符存入结点中,并递归创建左右子树。最终返回根结点。
接着,我们定义了查找最小值结点的函数 `findMinNode()`,它使用了一个 while 循环,不断沿着左子树向下遍历,直到找到最左边的叶子结点,即最小值结点。
最后,在主函数中,我们调用 `createTree()` 创建二叉树,然后调用 `findMinNode()` 查找最小值结点,并输出其值。如果二叉树为空,则输出 "The tree is empty!"。
阅读全文