建立二叉树的二叉链表存储并输出最小值和最大值c语言
时间: 2024-03-19 21:44:33 浏览: 64
建立二叉树的二叉链表存储可以使用递归方式实现,每次输入一个节点的值,如果值为0则表示该节点为空,否则创建一个新节点,并继续输入该节点的左右子节点值。具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
typedef struct BiTNode
{
int data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
// 建立二叉树
void CreateBiTree(BiTree *T)
{
int data;
scanf("%d", &data);
if(data == 0)
*T = NULL;
else
{
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = data;
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
}
// 中序遍历二叉树,得到最小值和最大值
void InOrderTraverse(BiTree T, int *min, int *max)
{
if(T)
{
InOrderTraverse(T->lchild, min, max);
if(T->data < *min) // 更新最小值
*min = T->data;
if(T->data > *max) // 更新最大值
*max = T->data;
InOrderTraverse(T->rchild, min, max);
}
}
int main()
{
BiTree T;
int min = INT_MAX, max = INT_MIN; // 初始化最小值和最大值
printf("请输入二叉树的节点值,0表示该节点为空:\n");
CreateBiTree(&T);
InOrderTraverse(T, &min, &max);
printf("min = %d, max = %d\n", min, max);
return 0;
}
```
上述代码中,我们先通过`CreateBiTree()`函数创建二叉树,然后再使用`InOrderTraverse()`函数遍历二叉树,得到最小值和最大值。在`InOrderTraverse()`函数中,我们使用了指针传递的方式,将最小值和最大值的地址传递给了函数,函数中通过对`min`和`max`的操作来更新最小值和最大值。输出最小值和最大值时,直接访问`min`和`max`即可。
阅读全文