您的位置:首页 > 理论基础 > 数据结构算法

数据结构中二叉树的c++实现

2017-01-16 11:27 381 查看
       笔者最近在编写PEG算法(progressive edge-growth algorithm)时,用到了二叉树的层遍历算法,所以顺便总结了一下

二叉树的算法;这里规定当输入数据是零时,表示该节点为空,采用先序递归算法输入数据,同时采用递归算法输出数据,具

体实现方法如下示:

/*********************************************************************
function:实现二叉树
author: perfects110 version:1.0
**********************************************************************/
#include<iostream>
using namespace std;
typedef int type;
typedef struct biTree{
type data;
biTree *lchild,*rchild;
};
////////////////////////初始化树////////////////////////
void initialTree(biTree* &p){
p=(biTree*)malloc(sizeof(biTree));
p->lchild=NULL;
p->rchild=NULL;
};
//////////////////////创建二叉树//////////////////////
void createTree(biTree* &p){
type data;
scanf("%d",&data);
if(data==0)
p=NULL;
else{
p=(biTree*)malloc(sizeof(biTree));
p->data=data;
createTree(p->lchild);
createTree(p->rchild);
}
};
////////////////////先序遍历///////////////////////
void lfPrint(biTree* &p){
if(p!=NULL){
cout<<p->data<<" ";
lfPrint(p->lchild);
lfPrint(p->rchild);
}
};
////////////////////中序遍历///////////////////////
void cnPrint(biTree* &p){
if(p!=NULL){
cnPrint(p->lchild);
cout<<p->data<<" ";
cnPrint(p->rchild);
}
};
////////////////////后序遍历///////////////////////
void ltPrint(biTree* &p){
if(p!=NULL){
ltPrint(p->lchild);
ltPrint(p->rchild);
cout<<p->data<<" ";
}
};
////////////////////释放内存///////////////////////
void freeTree(biTree* &p){
if(p!=NULL){
freeTree(p->lchild);
freeTree(p->rchild);
free(p);
}
};
/////////////////查找树的深度//////////////////////
int returnDepth(biTree* &p){
if(p==NULL){
return -1;
}else{
int lf=returnDepth(p->lchild);
int rt=returnDepth(p->rchild);
return (lf>rt?lf:rt)+1;
}
};
int main()
{
biTree* tree;
createTree(tree);
cnPrint(tree);
cout<<endl;
lfPrint(tree);
cout<<endl;
ltPrint(tree);
cout<<"depth:"<<returnDepth(tree)<<endl;
freeTree(tree);
return 0;
}
它的运行结果如下示:



        
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: