void CreateBiTree(BiTree &T)
时间: 2023-10-29 18:07:38 浏览: 65
这是一个创建二叉树的函数,函数名为CreateBiTree,参数为二叉树指针T,类型为BiTree。下面是函数的伪代码实现:
1. 读入一个字符ch
2. 如果ch等于'#',则将T置为NULL,函数返回
3. 否则,将ch赋值给T的数据域
4. 递归调用CreateBiTree,创建T的左子树
5. 递归调用CreateBiTree,创建T的右子树
函数的实现过程中,我们需要从标准输入中读入二叉树的先序遍历序列,其中'#'表示该节点为空。具体实现可以参考如下代码:
```
void CreateBiTree(BiTree &T) {
char ch;
cin >> ch;
if (ch == '#') {
T = NULL;
} else {
T = new BiTNode;
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
```
注意,在创建子树的时候,需要传入子树的指针作为参数,因此递归调用时需要传入T的左右子树指针。
相关问题
1、编写二叉树基本操作算法(可如下所示函数,也可自定义,能实现即可)①算法5.2中序遍历二叉树T的非递归算法void InOrderTraverse1(BiTree T)②算法5.3先序遍历的顺序建立二叉链表void CreateBiTree(BITree &T) 2、编写主函数,调用上述算法实现二叉树的中序遍历操作。
1. 二叉树基本操作算法如下:
```
typedef struct BiTNode {
int data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
/* 中序遍历二叉树的非递归算法 */
void InOrderTraverse1(BiTree T) {
stack<BiTree> S;
BiTree p = T;
while (p || !S.empty()) {
if (p) {
S.push(p);
p = p->lchild;
} else {
p = S.top();
S.pop();
printf("%d ", p->data);
p = p->rchild;
}
}
}
/* 先序遍历的顺序建立二叉链表 */
void CreateBiTree(BiTree &T) {
int ch;
scanf("%d", &ch);
if (ch == -1) {
T = NULL;
} else {
T = (BiTree)malloc(sizeof(BiTNode));
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
```
2. 主函数如下:
```
int main() {
BiTree T = NULL;
CreateBiTree(T);
InOrderTraverse1(T);
return 0;
}
```
其中,通过调用 `CreateBiTree()` 建立二叉树,并传入 `InOrderTraverse1()` 函数中进行中序遍历。
CreateBiTree(BiTree &T)——根据先序遍历的字符序列,创建一棵按二叉链表结构存储的二叉树,指针变量T指向二叉树的根结点。
以下是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` 函数的实现使用了递归的思路,每次读入一个字符,如果是空格则表示该节点为空,否则创建一个新节点,并递归地创建其左右子树。