CreateBiTree(BiTree &T)——根据先序遍历的字符序列,创建一棵按二叉链表结构存储的二叉树,指针变量T指向二叉树的根结点。
时间: 2024-05-02 15:17:00 浏览: 97
以下是C++实现:
```cpp
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);
}
}
```
使用方法:
```cpp
int main() {
BiTree T;
printf("请输入先序遍历的字符序列:\n");
CreateBiTree(T);
return 0;
}
```
具体解释:
`CreateBiTree` 函数的实现使用了递归的思路,每次读入一个字符,如果是空格则表示该节点为空,否则创建一个新节点,并递归地创建其左右子树。
相关问题
C语言假设二叉树的结点值是字符,根据输入的一棵二叉树的完整先序遍历序列建立一棵以二叉链表表示的二叉树。
好的,根据您的问题,我来给您讲解一下如何实现。
先序遍历的顺序是:根节点、左子树、右子树。因此,我们可以利用递归的方式建立二叉树。
具体实现步骤如下:
1. 定义二叉树结构体
```
typedef struct BiTNode
{
char data; // 结点值
struct BiTNode *lchild; // 左孩子
struct BiTNode *rchild; // 右孩子
}BiTNode, *BiTree;
```
2. 编写建立二叉树的函数
```
// 创建二叉树
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);
}
}
```
3. 调用建立二叉树的函数
```
int main()
{
BiTree T = NULL;
printf("请输入先序遍历序列:\n");
CreateBiTree(&T);
return 0;
}
```
这样就可以根据输入的先序遍历序列建立一棵以二叉链表表示的二叉树了。
请用C语言编程:按先序遍历序列建立一个二叉树的二叉链表,统计二叉树中叶子结点个数和二叉树的深度。
以下是用C语言编写的程序,实现按先序遍历序列建立一个二叉树的二叉链表,统计二叉树中叶子结点个数和二叉树的深度。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode{
int data;
struct TreeNode *lchild;
struct TreeNode *rchild;
}TreeNode, *BiTree;
// 创建二叉树
void createBiTree(BiTree *T){
int data;
scanf("%d", &data);
if(data == -1){
*T = NULL;
}else{
*T = (TreeNode *)malloc(sizeof(TreeNode));
(*T)->data = data;
createBiTree(&((*T)->lchild));
createBiTree(&((*T)->rchild));
}
}
// 统计叶子结点个数
int countLeafNode(BiTree T){
if(!T) return 0;
if(!T->lchild && !T->rchild) return 1;
return countLeafNode(T->lchild) + countLeafNode(T->rchild);
}
// 计算二叉树深度
int getDepth(BiTree T){
int leftDepth, rightDepth;
if(!T) return 0;
leftDepth = getDepth(T->lchild);
rightDepth = getDepth(T->rchild);
return (leftDepth > rightDepth) ? (leftDepth + 1) : (rightDepth + 1);
}
int main(){
BiTree T;
printf("请输入先序遍历序列:\n");
createBiTree(&T);
printf("叶子结点个数:%d\n", countLeafNode(T));
printf("二叉树深度:%d\n", getDepth(T));
return 0;
}
```
程序的运行结果如下:
```
请输入先序遍历序列:
1 2 -1 -1 3 -1 4 -1 -1
叶子结点个数:2
二叉树深度:3
```
以上程序中,createBiTree()函数用于创建二叉树,countLeafNode()函数用于统计二叉树中叶子结点的个数,getDepth()函数用于计算二叉树的深度。主函数中先要输入先序遍历序列来创建二叉树,然后调用countLeafNode()和getDepth()函数来统计叶子结点个数和计算二叉树深度,最后输出结果。
阅读全文