在c语言中用递归的方法实现以下算法:1.以二叉链表表示二叉树,建立一棵二叉树;2.输出二叉树的先序、中序和后序遍历结果;3.计算二叉树的深度;4.统计二叉树的结点个数; 5.统计二叉树的叶结点个数;6.统计二叉树的度为1的结点个数;
时间: 2023-11-13 20:57:01 浏览: 104
1. 以二叉链表表示二叉树,建立一棵二叉树的递归实现方法如下:
```c
typedef struct BiTNode {
char data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
void CreateBiTree(BiTree *T) {
char ch;
scanf("%c", &ch);
if (ch == '#') {
*T = NULL;
} else {
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
}
```
2. 输出二叉树的先序、中序和后序遍历结果的递归实现方法如下:
```c
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);
}
}
```
3. 计算二叉树的深度的递归实现方法如下:
```c
int TreeDepth(BiTree T) {
if (!T) {
return 0;
} else {
int leftDepth = TreeDepth(T->lchild);
int rightDepth = TreeDepth(T->rchild);
return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
}
}
```
4. 统计二叉树的结点个数的递归实现方法如下:
```c
int NodeCount(BiTree T) {
if (!T) {
return 0;
} else {
return NodeCount(T->lchild) + NodeCount(T->rchild) + 1;
}
}
```
5. 统计二叉树的叶结点个数的递归实现方法如下:
```c
int LeafCount(BiTree T) {
if (!T) {
return 0;
} else if (!T->lchild && !T->rchild) {
return 1;
} else {
return LeafCount(T->lchild) + LeafCount(T->rchild);
}
}
```
6. 统计二叉树的度为1的结点个数的递归实现方法如下:
```c
int DegreeOneCount(BiTree T) {
if (!T) {
return 0;
} else if ((!T->lchild && T->rchild) || (T->lchild && !T->rchild)) {
return DegreeOneCount(T->lchild) + DegreeOneCount(T->rchild) + 1;
} else {
return DegreeOneCount(T->lchild) + DegreeOneCount(T->rchild);
}
}
```
阅读全文