完成二叉树二叉链表结构的定义实现二叉链表创建二叉树(尝试用递归算法实现),并实现先序、中序和后序遍历算法。
时间: 2023-12-01 12:58:49 浏览: 115
好的,这是一个关于数据结构的问题,我可以回答。
二叉树的定义可以用一个结构体来实现,其中包括一个数据域,和左右子树指针。定义如下:
```
typedef struct BTNode{
int data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
```
然后通过构造二叉链表来创建二叉树。递归的实现如下:
```
BTNode* createBiTree(){
int data;
scanf("%d", &data);
if (data == -1) { // -1表示该节点为空
return NULL;
}
// 动态分配空间
BTNode* root = (BTNode*)malloc(sizeof(BTNode));
root->data = data;
root->lchild = createBiTree();
root->rchild = createBiTree();
return root;
}
```
接着,我们实现先序遍历、中序遍历和后序遍历算法。分别用递归和非递归实现如下:
```
void preOrder(BTNode* root) { // 先序遍历
if (root == NULL) {
return;
}
printf("%d ", root->data);
preOrder(root->lchild);
preOrder(root->rchild);
}
void inOrder(BTNode* root) { // 中序遍历
if (root == NULL) {
return;
}
inOrder(root->lchild);
printf("%d ", root->data);
inOrder(root->rchild);
}
void postOrder(BTNode* root) { // 后序遍历
if (root == NULL) {
return;
}
postOrder(root->lchild);
postOrder(root->rchild);
printf("%d ", root->data);
}
void preOrderNonRecursive(BTNode* root) { // 非递归先序遍历
if (root == NULL) {
return;
}
BTNode* stack[100]; // 模拟栈
int top = -1;
stack[++top] = root;
while (top != -1) {
BTNode* node = stack[top--];
printf("%d ", node->data);
if (node->rchild) {
stack[++top] = node->rchild;
}
if (node->lchild) {
stack[++top] = node->lchild;
}
}
}
void inOrderNonRecursive(BTNode* root) { // 非递归中序遍历
if (root == NULL) {
return;
}
BTNode* stack[100]; // 模拟栈
int top = -1;
BTNode* p = root;
while (p != NULL || top != -1) {
while (p != NULL) {
stack[++top] = p;
p = p->lchild;
}
if (top != -1) {
p = stack[top--];
printf("%d ", p->data);
p = p->rchild;
}
}
}
void postOrderNonRecursive(BTNode* root) { // 非递归后序遍历
if (root == NULL) {
return;
}
BTNode* stack1[100];
BTNode* stack2[100];
int top1 = -1;
int top2 = -1;
BTNode* p = root;
stack1[++top1] = p;
while (top1 != -1) {
p = stack1[top1--];
stack2[++top2] = p;
if (p->lchild) {
stack1[++top1] = p->lchild;
}
if (p->rchild) {
stack1[++top1] = p->rchild;
}
}
while (top2 != -1) {
p = stack2[top2--];
printf("%d ", p->data);
}
}
```
以上是关于二叉树的定义、创建和遍历算法的实现,希望对你有所帮助。
阅读全文