二叉树的建立(广义表)及3种遍历
2007-11-09 15:53
330 查看
/*****************************************************
Copyright (C)
FileName: BiTree.c
Author: Luqing Date:2006/4/11
Description: // The basic operations of Bi_Tree
Version: // v1.0
Function List: // creatree, preorder, inorder, postorder
******************************************************/
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
typedef char ElemType;
typedef struct node
{
ElemType data;
struct node *left,*right;
} BiTreeNode,*BiTree;
struct node * creatree(char *str)
{
BiTreeNode *stack[MaxSize],*p;
BiTreeNode *BT;
int top=-1,k,j=0;//top为栈指针,k指定是左还是右孩子,j为str指针
char ch;
BT=NULL;
ch=str[j];
while (ch!='/0')
{
switch(ch)
{
case '(':top++;stack[top]=p;k=1; //为左结点
break;
case ')':top--;
break;
case ',':k=2; //为右结点
break;
default: p=(BiTreeNode *)malloc(sizeof(BiTreeNode));
p->data=ch;p->left=p->right=NULL;
if (BT==NULL) //根结点//
BT=p;
else
{
switch(k)
{
case 1:stack[top]->left=p;
break;
case 2:stack[top]->right=p;
}
}
}
j++;
ch=str[j];
}
return BT;
}
void preorder(BiTreeNode *BT)
{
if (BT!=NULL)
{
printf("%c",BT->data);
preorder(BT->left);
preorder(BT->right);
}
}
void inorder(BiTreeNode *BT)
{
if (BT!=NULL)
{
inorder(BT->left);
printf("%c",BT->data);
inorder(BT->right);
}
}
void postorder(BiTreeNode *BT)
{
if (BT!=NULL)
{
postorder(BT->left);
postorder(BT->right);
printf("%c",BT->data);
}
}
int main()
{
BiTreeNode *B;
//char *s="A(B,C)";
char *s="A(B(E,F),C(D(G,),)";
B=creatree(s);
printf("/n前序遍历:");
preorder(B);
printf("/n中序遍历:");
inorder(B);
printf("/n后序遍历:");
postorder(B);
printf("/n");
return 0;
}
Copyright (C)
FileName: BiTree.c
Author: Luqing Date:2006/4/11
Description: // The basic operations of Bi_Tree
Version: // v1.0
Function List: // creatree, preorder, inorder, postorder
******************************************************/
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
typedef char ElemType;
typedef struct node
{
ElemType data;
struct node *left,*right;
} BiTreeNode,*BiTree;
struct node * creatree(char *str)
{
BiTreeNode *stack[MaxSize],*p;
BiTreeNode *BT;
int top=-1,k,j=0;//top为栈指针,k指定是左还是右孩子,j为str指针
char ch;
BT=NULL;
ch=str[j];
while (ch!='/0')
{
switch(ch)
{
case '(':top++;stack[top]=p;k=1; //为左结点
break;
case ')':top--;
break;
case ',':k=2; //为右结点
break;
default: p=(BiTreeNode *)malloc(sizeof(BiTreeNode));
p->data=ch;p->left=p->right=NULL;
if (BT==NULL) //根结点//
BT=p;
else
{
switch(k)
{
case 1:stack[top]->left=p;
break;
case 2:stack[top]->right=p;
}
}
}
j++;
ch=str[j];
}
return BT;
}
void preorder(BiTreeNode *BT)
{
if (BT!=NULL)
{
printf("%c",BT->data);
preorder(BT->left);
preorder(BT->right);
}
}
void inorder(BiTreeNode *BT)
{
if (BT!=NULL)
{
inorder(BT->left);
printf("%c",BT->data);
inorder(BT->right);
}
}
void postorder(BiTreeNode *BT)
{
if (BT!=NULL)
{
postorder(BT->left);
postorder(BT->right);
printf("%c",BT->data);
}
}
int main()
{
BiTreeNode *B;
//char *s="A(B,C)";
char *s="A(B(E,F),C(D(G,),)";
B=creatree(s);
printf("/n前序遍历:");
preorder(B);
printf("/n中序遍历:");
inorder(B);
printf("/n后序遍历:");
postorder(B);
printf("/n");
return 0;
}
相关文章推荐
- 二叉树采用二叉链表结构表示。设计并实现如下算法:输入某棵二叉树的广义表形式,建立该二叉树,并按层次遍历该二叉树。
- SDUTOJ 1291 数据结构之二叉树的建立与遍历(带返回值,指针引用,数组模拟3种方式)
- JAVA建立二叉树和3种遍历
- 【数据结构基础】二叉树的建立和递归遍历
- 二叉树的建立以及遍历C/C++
- [LeetCode] 105. Construct Binary Tree from Preorder and Inorder Traversal 由先序和中序遍历建立二叉树
- 二叉树建立与遍历
- 二叉树的建立及递归遍历
- 二叉树的建立与遍历
- 二叉树的建立及遍历实现
- 2136 数据结构实验之二叉树的建立与遍历
- java创建二叉树并实现3种遍历(不使用类集)
- 【二叉树】二叉树的建立与遍历
- 【暂无】 二叉树 根据遍历结果建立二叉树(build-tree.cpp)
- 数据结构实验之二叉树的建立与遍历
- 递归建立普通二叉树两种方式遍历
- java--从txt文件中读取完全二叉树数据建立二叉树并打印出遍历结果
- 面试题:二叉树的层次遍历,包括定制树的建立
- 二叉树的建立与递归遍历C++版
- LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal (用中序和后序树遍历来建立二叉树)