1、二叉树就是每个结点最多有两个子树的树形存储结构,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被且只被访问一次。
程序的流程图如下:
程序代码如下:
#include
2、InitBTree(BTreeNode*& BT){ //初始化二叉树 BT=NULL; } void CreateBTree(BTreeNode*& BT,char*a){ //根据广义表表示的二叉树建立对应的存储结构 const int MaxSize=10; BTreeNode*s[MaxSize]; int top=-1; BT=NULL; BTreeNode*p; int k; int i=0; while(a[i]){ switch(a[i]){ case ' ': break; case '(
3、': if(top==MaxSize-1){ printf("栈的空间太小,请增加MaxSize的值\n"); exit(1); } top++; s[top]=p; k=1; break; case ')': if(top==-1){ printf("二叉树广义表字符串错!\n"); exit(1); } top--; break; case ',': k=2; break; default: p=new BTreeNode;
4、 p->data=a[i]; p->left=p->right=NULL; if(BT==NULL) BT=p; else{ if(k==1) s[top]->left=p; else s[top]->right=p; } } i++; } } bool EmptyBTree(BTreeNode*BT){ //判断一棵二叉树是否为空,若是则返回ture,否则返回false return BT==NULL; } int DepthBTree(BTreeNode*BT){ i
5、f(BT==NULL) return 0; else{ int dep1=DepthBTree(BT->left); int dep2=DepthBTree(BT->right); if(dep1>dep2) return dep1+1; else return dep2+1; } } bool FindBTree(BTreeNode*BT,ElemType&x){ //从二叉树中查找值为x的结点,若存在该结点则由x带回它的完整值 if(BT==NULL) return false; else{ if(BT->d
6、ata==x){
x=BT->data;
return true;
}
else{
if(FindBTree(BT->left,x))
return true;
if(FindBTree(BT->right,x))
return true;
return false;
}
}
}
void PrintBTree(BTreeNode*BT){ //按照树的一种表示方法输出一棵二叉树
if(BT!=NULL){
cout<
7、if(BT->left!=NULL||BT->right!=NULL){ cout<<'('; PrintBTree(BT->left); if(BT->right!=NULL) cout<<','; PrintBTree(BT->right); cout<<')'; } } } void ClearBTree(BTreeNode*&BT){ //清除二叉树中的所有结点,使之变为一棵空树 if(BT!=NULL){ ClearBTree(BT->left); ClearBTree(BT->right);
8、 delete BT;
BT=NULL;
}
}
void PreOrder(BTreeNode*BT){
if(BT!=NULL){
cout<
9、e*BT){
if(BT!=NULL){
PostOrder(BT->left);
PostOrder(BT->right);
cout<
10、
BTreeNode*p;
if(BT!=NULL){ //将树根指针进队
rear=(rear+1)%MaxSize;
q[rear]=BT;
}
while(front!=rear){ //当队列非空时执行循环
front=(front+1)%MaxSize; //使队首指针指向队首元素
p=q[front]; //删除队首元素
cout<
11、r=(rear+1)%MaxSize; q[rear]=p->left; } if(p->right!=NULL){ rear=(rear+1)%MaxSize; q[rear]=p->right; } } //while end// } void main(){ system("color 75"); //设置颜色以美观 BTreeNode*bt; InitBTree(bt); char b[999]; printf("输入二叉树广义表字符串:\n"); cin.getline(b,sizeof(b));
12、CreateBTree(bt,b);
PrintBTree(bt);
cout<






