游客已登陆 (0)未知
笔行证 257310
昵称 kuan 
笔贝 Score1
加为好友 发送短信
<< << 2009 一月 >> >>
123
45678910
11121314151617
18192021222324
25262728293031

访问计数:27089
本文:261 今天:1 本月 261

本地音乐播放器



 
       二叉树
2007-04-12 晴



struct BTreeNode //独立结点
{
ElemType data;
BTreeNode *left;
BTreeNode *right;
};

struct ABTreeNode //元素结点
{
ElemType data;
int left,right;
};
typedef ABTreeNode ABTList[BTreeMaxSize];




void InitBTree(BTreeNode *&BT)
{
BT = NULL;
}

void CreateBTree(BTreeNode *&BT, char *a)
{
BTreeNode *s[10];
int top=-1;
BT=NULL;
BTreeNode *p;
int k;

istrstream ins(a);
char ch;
ins>>ch;

while(ch != '@')
{
switch(ch)
{
case'(':
top++;
s[top]=p;
k=1;
break;
case')':
top--;
break;
case',':
k=2;
break;
default:
p= new BTreeNode;
p=>data=ch;
p->left = p->reght = NULL;
if(BT ==NULL)
BT = p;
else
{
switch(k)
{
case 1:
s[top]->left=p;
break;
case 2:
s[top]->right=p;
}
}
}
ins>>ch;
}
}


int BTreeEmpty(BTreeNode *BT)
{
return BT == NULL;
}


void Preorder(BTreeNode *BT)//前序遍历
{
if(BT != NULL)
{
cout<<BT->data<<' ';
preorder(BT->left);
preorder(BT->right);
}
}


void Inorder(BTreeNode *BT)//中序遍历
{
if(BT != NULL)
{
preorder(BT->left);
cout<<BT->data<<' ';
preorder(BT->right);
}
}


void Postorder(BTreeNode *BT)//后序遍历
{
if(BT != NULL)
{
preorder(BT->left);
preorder(BT->right);
cout<<BT->data<<' ';
}
}

void Levelorder(BTreeNode *BT)//按层遍历
{
BTreeNode *g[30];
int front=0,rear=0;
BTreeNode *p;
if(BT != NULL)
{
rear = (rear +1)%30;
q[rear] = BT;
}
while(front != rear)//当队列非空时执行循环
{
front=(front+1)%30;
p=q[front];
cout<<p->data<<' ';

if((p->left != NULL)
{
rear =(rear + 1)%30;
q[rear]=p->left;
}
if(p->reght != NULL)
{
rear = (rear +1)%30;
a[rear]=p->right;
}
}
}

void BTreeDepth(BTreNode *BT)//求由BT指针指向的一棵二叉结的深度
{
if(BT == NULL)
{
return 0;
}
else
{
int dep1 = BTreeDepth(BT->left);
int dep2 = BTreeDepth(BT->right);
if(dep1 > dep2)
return dep1+1;
else
return dep2+1;
}
}


void PrentBTree(BTreeNode *BT)//输出二叉
{
if(BT != NULL)
{
cout<<BT->data;
if(BT->left != NULL || BT->right != NULL)
{
cout<<'(';
PrentBTree(BT->left);//递归输出左子树
if(BT->rhght != NULL)
cout<<',';
PrentBTree(BT->right);//递归输出右子树
cout<<')';
}
}
}


//----------------------------清除二叉树----------------------------

void DeleteBTree(BTreeNode *BT)
{
if(BT != NULL)
{
DeleteBTree(BT->left);//递归删除左子树
DeleteBTree(BT->right);//递归删除右子树
delete BT;//删除根结点 很多个根结点喔
}
}


ClearBTree(BTreeNode * &BT)
{
DileteBTree(BT);
BT=NULL;
}

//----------------------------清除二叉树----------------------------.
# posted by kuan @ 2007-04-12 12:55:11 评论(0)
 








 
笔 名:
*
评 论:
最多1000字。当前字数:0
*
联系方式: