#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct node //struct作用:一种构造数据类型,结构体
{
ElemType data;
struct node *lchild;//指向struct node这个结构体类型
struct node *rchild;//指向右孩子结点,左孩子结点
}BTNode; //声明二叉链结点类型,BT:btree二叉树,一个数据域,两个指针域
//typedef作用:BTNode就是struct node的别名
void CreateBTree(BTNode *&b,char *str)//构造出一个根节点的指针,构造二叉树用到的字符串
{
BTNode *St[MaxSize],*p;//St数组为顺序栈
int top=-1,k,j=0; //top为栈顶指针
char ch; //ch读取str的每一个字符
b=NULL; //初始时二叉链为空,b为根节点
ch=str[j]; //取出第一个符号A
while(ch!='\0') //'\0'表示ASCII码值为0的字符。在字符串中'\0'用作字符串的结束标志
{
switch(ch) //当ch=?
{
case '(':
top++; //栈顶指针增1
St[top]=p;//元素p放在栈指针处
k=1; //左孩子
break;
case ')':
top--; //将元素全部出栈
break;
case ',':
k=2; //右孩子
break;
default:p=(BTNode*)malloc(sizeof(BTNode)); //其他情况就是遇到字母了,开辟空间
p->data=ch; //数据域的值赋值给p->data,存放结点值
p->lchild=p->rchild=NULL; //左、右指针都设置为空
if(b==NULL) //若尚未建立根节点
b=p; //p所指结点就是根节点
else
{
switch(k) //当k=?
{
case 1:St[top]->lchild=p;break;
case 2:St[top]->rchild=p;break;
}
}
}
j++;
ch=str[j]; //把str数组的每一个符号都取出来,直到ch=='\0'
}
}
void DestroyBTree(BTNode *&b)
{
if(b!=NULL)
{
DestroyBTree(b->lchild);
DestroyBTree(b->rchild);
free(b);
}
}
BTNode *FindNode(BTNode*b,ElemType x) //根节点:b,查找值为x的结点,返回指向BTNode这样的指针
{
BTNode *p;
if(b == NULL)
return NULL;
else if(b->data == x)
return b;
else
{
p=FindNode(b->lchild,x);
if(p!=NULL)
return p;
else
return FindNode(b->rchild,x);
}
}
BTNode *LchildNode(BTNode *p)
{
return p->lchild;
}
BTNode *RchildNode(BTNode *p)
{
return p->rchild;
}
int BTHeight(BTNode *b)
{
int lchildh,rchildh;
if(b == NULL) return (0);
else
{
lchildh=BTHeight(b->lchild);
lchildh=BTHeight(b->rchild);
return(lchildh>rchildh)?(lchildh+1):(rchildh+1);
}
}
void DispBTree(BTNode *b)
{
if(b!=NULL)
{
printf("%c",b->data);
if(b->lchild!=NULL || b->rchild!=NULL)
{
printf("(");
DispBTree(b->lchild);
if(b->rchild!=NULL)printf(",");
DispBTree(b->rchild);
printf(")");
}
}
}
int main()
{
return 0;
}
实现二叉树各种基本运算的算法
最新推荐文章于 2024-06-07 20:44:42 发布