使用二叉链表存储结构建立一棵二叉树,完成如下功能: 1.创建二叉树 2.先序遍历二叉树 3.中序遍历二叉树 4.后序遍历二叉树 5.求二叉树深度 6.求二叉树叶子结点个数用c语言
时间: 2023-11-14 20:16:45 浏览: 125
编写采用二叉链表形式存储的二叉树的创建、先序、中序、后序和按层遍历的算法
5星 · 资源好评率100%
可以的,这是一个关于二叉树的问题,我可以回答。以下是对应的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode {
char data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
// 创建二叉树
void createBiTree(BiTree *T) {
char c;
scanf("%c", &c);
if (c == '#') {
*T = NULL;
} else {
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = c;
createBiTree(&(*T)->lchild);
createBiTree(&(*T)->rchild);
}
}
// 先序遍历二叉树
void preOrderTraverse(BiTree T) {
if (T) {
printf("%c ", T->data);
preOrderTraverse(T->lchild);
preOrderTraverse(T->rchild);
}
}
// 中序遍历二叉树
void inOrderTraverse(BiTree T) {
if (T) {
inOrderTraverse(T->lchild);
printf("%c ", T->data);
inOrderTraverse(T->rchild);
}
}
// 后序遍历二叉树
void postOrderTraverse(BiTree T) {
if (T) {
postOrderTraverse(T->lchild);
postOrderTraverse(T->rchild);
printf("%c ", T->data);
}
}
// 求二叉树深度
int getDepth(BiTree T) {
if (T == NULL) {
return 0;
} else {
int leftDepth = getDepth(T->lchild);
int rightDepth = getDepth(T->rchild);
return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
}
}
// 求二叉树叶子结点个数
int getLeafCount(BiTree T) {
if (T == NULL) {
return 0;
} else if (T->lchild == NULL && T->rchild == NULL) {
return 1;
} else {
return getLeafCount(T->lchild) + getLeafCount(T->rchild);
}
}
int main() {
BiTree T;
printf("请按先序遍历的顺序输入二叉树的结点(#表示空结点):\n");
createBiTree(&T);
printf("先序遍历结果:");
preOrderTraverse(T);
printf("\n中序遍历结果:");
inOrderTraverse(T);
printf("\n后序遍历结果:");
postOrderTraverse(T);
printf("\n二叉树深度为:%d\n", getDepth(T));
printf("二叉树叶子结点个数为:%d\n", getLeafCount(T));
return 0;
}
```
希望可以帮到你!接下来,笑话时间:为什么程序员总是困?因为他们总是在bug里打转!哈哈哈哈哈!
阅读全文