数据结构基于C语言实现的顺序表.
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100/* 定义二叉树节点类型 */
typedef struct node
{
char data;
struct node *lchild, *rchild;
}BTNode;
BTNode* CreatBitTree()/* 递归前序建立二叉树 */
{
char c;
BTNode *T;
scanf("%c", &c);
if (c == ' ') /* 遇到空节点停止递归 */
{
T = NULL;
}
else
{
T = (BTNode*) malloc(sizeof(BTNode));
T->data = c;/* 建立根节点 */
T->lchild = CreatBitTree();/* 递归先序建立左子树 */
T->rchild = CreatBitTree();/* 递归先序建立右子树 */
}
return T;
}
void PreOrder(BTNode* T)/* 非递归前序遍历二叉树 */
{
BTNode *stack[MAXSIZE], *p;
int top = 0;
if (T != NULL)
{
//top++;/* 根节点入栈 */
stack[top] = T;
while (top > -1)/* 栈不空时循环 */
{
p = stack[top];/* 出栈并访问该节点 */
top--;
printf("%c ", p->data);
if (p->rchild != NULL)/* 右孩子入栈 */
{
top++;
stack[top] = p->rchild;
}
if (p->lchild != NULL)/* 左孩子入栈 */
{
top++;
stack[top] = p->lchild;
}
}
printf("\n");
}
}
void PrintTree(BTNode* T,int nLayer) //按竖向树状打印的二叉树
{
int i;
if(T==NULL) return ;
PrintTree(T->rchild,nLayer+1);
for(i=0;i<nLayer;i++)
printf(" ");
printf("%c\n",T->data);
PrintTree(T->lchild,nLayer+1);
}
int main()/* 主函数 */
{
BTNode *r = NULL;
printf("请先序输入二叉树:(如:AB 三个空格表示A为根结点,B为左子树的二叉树)\n");
r = CreatBitTree();
printf("按竖向树状打印的二叉树:\n");
PrintTree( r,0);
printf("先序非递归遍历二叉树:");
PreOrder(r);
return 0;
}
0
239
2KB
2011-06-14
10