1.二叉树先序递归算法

#include<stdio.h>
#include<malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct node
{
ElemType data;
struct node* lchild;
struct node* rchild;
} BTNode;
void CreateBTree(BTNode*& b, const char* str)
{
BTNode* st[MaxSize], * p = NULL;
char ch;
int j, top, k;
j = 0;
top = -1;
ch = str[j];
b = NULL;
while (ch != 0)
{
switch (ch)
{
case '(':++top; st[top] = p; k = 1; break;
case ')':--top; break;
case ',':k = 2; break;
default:p=(BTNode*)malloc(sizeof(BTNode));
p->data = str[j]; //p->data=ch;
p->lchild = NULL;
p->rchild = NULL;
if (!b)
b = p;
else
{
switch (k)
{
case 1:st[top]->lchild = p; break;
case 2:st[top]->rchild = p; break;
}
}
}
j++;
ch = str[j];
}
}
void PreOrder(BTNode* b)
{
if (b != NULL)
{
printf("%c ", b->data);
PreOrder(b->lchild);
PreOrder(b->rchild);
}
}
int main()
{
BTNode* p;
CreateBTree(p, "A(B(D(,G)),C(E,F))");
printf("二叉树的先序递归:\n");
PreOrder(p);
return 1;
}
二叉树先序递归遍历运行结果如下
