用c语言编程构造二叉链表存储二叉树T以及用三种方式递归遍历T以及递归计算T的深度然后递归统计T中结点的个数以及递归统计T中叶子结点的个数的具体算法
时间: 2023-06-03 21:05:39 浏览: 130
答案:
构造二叉链表存储二叉树T的算法如下:
```
#define ElemType int
typedef struct BiTNode {
ElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
void CreateBiTree(BiTree *T) {
ElemType ch;
scanf("%d", &ch);
if (ch == 0) {
*T = NULL;
} else {
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
}
```
三种方式递归遍历二叉树T的算法如下:
前序遍历:
```
void PreOrderTraverse(BiTree T) {
if (T) {
printf("%d ", T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
```
中序遍历:
```
void InOrderTraverse(BiTree T) {
if (T) {
InOrderTraverse(T->lchild);
printf("%d ", T->data);
InOrderTraverse(T->rchild);
}
}
```
后序遍历:
```
void PostOrderTraverse(BiTree T) {
if (T) {
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%d ", T->data);
}
}
```
递归计算二叉树T的深度的算法如下:
```
int TreeDepth(BiTree T) {
if (!T) {
return 0;
} else {
int leftDepth = TreeDepth(T->lchild);
int rightDepth = TreeDepth(T->rchild);
return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
}
}
```
递归统计二叉树T中结点的个数的算法如下:
```
int NodeCount(BiTree T) {
if (!T) {
return 0;
} else {
return NodeCount(T->lchild) + NodeCount(T->rchild) + 1;
}
}
```
递归统计二叉树T中叶子结点的个数的算法如下:
```
int LeafCount(BiTree T) {
if (!T) {
return 0;
} else if (!T->lchild && !T->rchild) {
return 1;
} else {
return LeafCount(T->lchild) + LeafCount(T->rchild);
}
}
```
阅读全文