1.创建二叉树二叉链表的结点类型,如下: Typedef struct node { char data; struct node*lchild,*rchild; }BTNode; 2.输入二叉树的先序序列,创建二叉树:输入先序序列,输出指向二叉链 表的根结点的指针 BTNode*creat BiTree(char*str); 原样输出二叉树: void Dipbtnode(BTNode*b); 3.实现二叉树的3种遍历递归算法 先序递归算法 void PreOrder1(BTNode*b); 中序递归算法 void InOrder1(BTNode*b); 后序递归算法 void PostOrder1(BTNode*b);
时间: 2024-03-22 19:39:33 浏览: 105
好的,您的问题是如何创建二叉树并实现三种遍历递归算法。我来逐一回答:
1. 创建二叉树二叉链表的结点类型
我们可以使用结构体来定义二叉树的结点类型,如下所示:
```
typedef struct node {
char data;
struct node *lchild, *rchild;
} BTNode;
```
其中,data 表示结点中存储的数据,lchild 和 rchild 分别表示左子树和右子树。
2. 输入二叉树的先序序列,创建二叉树
我们可以通过递归的方式来创建二叉树。具体实现如下:
```
BTNode *createBiTree(char *str) {
static int i = 0;
BTNode *p = NULL;
if (str[i] != '\0') {
if (str[i] == '#') {
i++;
} else {
p = (BTNode *) malloc(sizeof(BTNode));
p->data = str[i];
i++;
p->lchild = createBiTree(str);
p->rchild = createBiTree(str);
}
}
return p;
}
```
其中,str 表示输入的先序序列,'#' 表示空结点。i 是一个静态变量,用来记录当前处理到的字符位置。createBiTree 函数返回指向根结点的指针。
3. 原样输出二叉树
我们可以使用递归的方式来实现原样输出二叉树。具体实现如下:
```
void dipBTNode(BTNode *b) {
if (b != NULL) {
printf("%c", b->data);
if (b->lchild != NULL || b->rchild != NULL) {
printf("(");
dipBTNode(b->lchild);
if (b->rchild != NULL) {
printf(",");
}
dipBTNode(b->rchild);
printf(")");
}
}
}
```
其中,b 表示当前要输出的结点。如果该结点有子结点,则输出括号,再递归输出子结点。
4. 实现二叉树的三种遍历递归算法
先序、中序和后序遍历都可以使用递归的方式来实现。
先序遍历的递归算法实现如下:
```
void preOrder1(BTNode *b) {
if (b != NULL) {
printf("%c ", b->data);
preOrder1(b->lchild);
preOrder1(b->rchild);
}
}
```
中序遍历的递归算法实现如下:
```
void inOrder1(BTNode *b) {
if (b != NULL) {
inOrder1(b->lchild);
printf("%c ", b->data);
inOrder1(b->rchild);
}
}
```
后序遍历的递归算法实现如下:
```
void postOrder1(BTNode *b) {
if (b != NULL) {
postOrder1(b->lchild);
postOrder1(b->rchild);
printf("%c ", b->data);
}
}
```
以上就是关于创建二叉树并实现三种遍历递归算法的全部内容。希望能对您有所帮助。
阅读全文