#include<stdio.h> #define NULL0 typedef struct Node { char data; struct Node *LChild; struct Node *RChild; }BiTNode,*BiTree; #define MAXSIZE 50 typedef struct { BiTree elem[MAXSIZE]; int front; int rear; }SeqQueue; void InitQueue(SeqQueue *Q) {Q->rear=Q->front=0;} int IsEmpty(SeqQueue *Q) { if(Q->rear==Q->front) return(1);else return(0);} int EnterQueue(SeqQueue *Q,BiTree x) { if((Q->rear+1)%MAXSIZE==Q->front) return(0); Q->elem[Q->rear]=x; Q->rear=(Q->rear+1)%MAXSIZE; return(1); } int DeleteQueue(SeqQueue *Q,BiTree *a) { if(Q->rear!=Q->front) { *a=Q->elem[Q->front]; Q->front=(Q->front+1)%MAXSIZE; } } //建立二叉树 void CreateBiTree(BiTree *bt) { }
时间: 2024-03-30 12:40:49 浏览: 45
你想问我如何实现二叉树的建立吗?这段代码看起来只是定义了一些数据结构和函数,并没有实现具体的功能。实现二叉树的建立需要对CreateBiTree函数进行具体的实现。你可以使用递归或非递归的方式实现二叉树的建立。在递归方式下,可以先输入根节点的值,再递归地输入左子树和右子树;在非递归方式下,可以使用队列来实现层次遍历的方式建立二叉树。具体实现可以参考相关的算法书籍或网上的教程。
相关问题
输入二叉树的先序遍历序列,以#代表空树,输出该二叉树的中序遍历序列。例如,有如下二叉树,其先序序列为:ABC##DE#G##F###,输出其中序序列:CBEGDFA void InOrder(BiTree Tree)//中序遍历 void creat(BiTree &Tree)//构建二叉树typedef struct BiTNode { char data; struct BiTNode *lchild; struct BiTNode *rchild; }BiTNode,*BiTree;测试样例为#include<stdio.h> #include<malloc.h> #define len sizeof(struct BiTNode ) typedef struct BiTNode { char data; struct BiTNode *lchild; struct BiTNode *rchild; }BiTNode,*BiTree; void InOrder(BiTree Tree); void creat(BiTree &Tree); int main() { BiTree Tree; creat(Tree);//创建二叉树 InOrder(Tree);//中序遍历 return 0; } /* 请在这里填写答案 */用c语言实现
代码如下:
```c
#include<stdio.h>
#include<malloc.h>
#define len sizeof(struct BiTNode )
typedef struct BiTNode {
char data;
struct BiTNode *lchild;
struct BiTNode *rchild;
}BiTNode,*BiTree;
void InOrder(BiTree Tree);
void creat(BiTree &Tree);
int main() {
BiTree Tree;
creat(Tree);//创建二叉树
InOrder(Tree);//中序遍历
return 0;
}
void creat(BiTree &Tree) {
char c;
scanf("%c", &c);
if(c == '#') {
Tree = NULL;
} else {
Tree = (BiTree)malloc(len);
Tree->data = c;
creat(Tree->lchild);
creat(Tree->rchild);
}
}
void InOrder(BiTree Tree) {
if(Tree) {
InOrder(Tree->lchild);
printf("%c", Tree->data);
InOrder(Tree->rchild);
}
}
```
输入先序遍历序列,构建二叉树,然后输出中序遍历序列。其中,`#`代表空树。
#include<stdio.h> #include<stdlib.h> define char TElemType typedef struct BiTNode{ TElemType data; struct BiTNode *lchild; struct BiTNode *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); } } void printTree(TreeNode* root) { if (root == NULL) { printf("# "); return; } printf("%c ", root->val); printTree(root->left); printTree(root->right); } int main() { BiTree T = NULL; printf("请输入先序遍历序列:\n"); CreateBiTree(&T); return 0; }这个C语言代码怎么改
这段代码存在一些问题:
1. `define char TElemType` 应该改为 `typedef char TElemType`,使得`TElemType` 成为一个类型别名,代表了二叉树节点的数据类型。
2. 函数 `printTree(TreeNode* root)` 没有声明,应该修改为 `void printTree(BiTree root)`。
修改后的代码如下:
```
#include<stdio.h>
#include<stdlib.h>
typedef char TElemType; // 定义二叉树节点的数据类型
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild;
struct BiTNode *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);
}
}
void printTree(BiTree root) {
if (root == NULL) {
printf("# ");
return;
}
printf("%c ", root->data);
printTree(root->lchild);
printTree(root->rchild);
}
int main() {
BiTree T = NULL;
printf("请输入先序遍历序列:\n");
CreateBiTree(&T);
printTree(T);
return 0;
}
```
这样就可以正确地根据输入的先序遍历序列建立一棵以二叉链表表示的二叉树,并输出这棵树的先序遍历序列了。
阅读全文