完整二叉树实例程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
包含二叉树的顺序存储,插入,删除结点,以及设置root结点,和前序、中序、后序、按层次遍历的完成代码。
#include
#include
#include
#define QUEUE_MAXSIZE 50
using namespace std;
typedef struct CTree
{
char data;
struct CTree *left;
struct CTree *right;
}CBTree;
CBTree *BTreeInit(CBTree *node)
{
if(node != NULL)
return node;
else
return NULL;
}
int BTreeAddNode(CBTree *bt,CBTree *node,int n) {
if(bt==NULL)
{
cout<<"no parent!"< return 0; } switch(n) { case 1: if(bt->left) { cout<<"the left is existing."< return 0; } else bt->left=node; break; case 2: if(bt->right) { cout<<"the right is existing."< return 0; } else bt->right=node; break; default: cout<<"it's wrong!"< return 0; } return 1; } CBTree *BTreeLeft(CBTree *bt) { if(bt) return bt->left; else return NULL; } CBTree *BTreeright(CBTree *bt) { if(bt) return bt->right; else return NULL; } int BTreeIsempty(CBTree *bt) { if(bt) return 0; else return 1; } int BTreeDepth(CBTree *bt) { int dep1,dep2; if(bt==NULL) return 0; else { dep1=BTreeDepth(bt->left); dep2=BTreeDepth(bt->right); if(dep1>dep2) return dep1+1; else return dep2+1; } } CBTree *BTreeFind(CBTree *bt,char data) { CBTree *p; if(bt==NULL) return NULL; else { if(bt->data == data) return bt; else { if(p=BTreeFind(bt->left,data)) return p; else if(p=BTreeFind(bt->right,data)) return p; else return NULL; } } } void BTreeClear(CBTree *bt) { if(bt) { BTreeClear(bt->left); BTreeClear(bt->right); free(bt); bt=NULL; } return; } void BTree_pre(CBTree *bt) { { cout< BTree_pre(bt->left); BTree_pre(bt->right); } return; } void BTree_mid(CBTree *bt) { if(bt) { BTree_mid(bt->left); cout< BTree_mid(bt->right); } return; } void BTree_post(CBTree *bt) { { BTree_post(bt->left); BTree_post(bt->right); cout< } return; } void BTree_level(CBTree *bt) { CBTree *p,*q[QUEUE_MAXSIZE]; int head=0,tail=0; if(bt) { tail=(tail+1)%QUEUE_MAXSIZE; q[tail]=bt; } while(head != tail) { head=(head+1)%QUEUE_MAXSIZE; p=q[head];