您的位置:首页 > 编程语言 > C语言/C++

二叉链表(C++引用实现)

2013-11-11 17:22 405 查看
#include<stdio.h>

#include<stdlib.h>

#include<iostream.h>

typedef struct BiNode

{
char data;
struct BiNode *lchild , *rchild; 

}BiTree;                                   //节点(数据,左孩子,右孩子 )

void create(BiTree * &T)                     //创建二叉链表(递归算法)

{

    char ch;
if((ch = getchar()) == '#')             //按照前序遍历输入,缺少孩子用‘#’补齐
T=NULL;

    else
{

        T=(BiTree*)malloc(sizeof(BiTree));
T->data  =  ch;
create(T->lchild);                 //递归(左子树)
create(T->rchild);                 //递归(右子树)
}

}

void preorder( BiTree *p)                  //前序遍历(递归)

{
if(p)
{

cout<<p->data<<" ";
preorder(p->lchild);
preorder(p->rchild);
}

}

void inorder( BiTree *p)                  //中序遍历(递归)

{
if(p)
{
inorder(p->lchild);
cout<<p->data<<" ";
inorder(p->rchild);
}

}

void postorder( BiTree *p)                //后序遍历(递归)

{
if(p)
{

      postorder(p->lchild);
postorder(p->rchild);
cout<<p->data<<" ";
}

}

int depth(BiTree *T)                     //求深度(递归)

{
int d1 = 0 , d2 = 0 , max;
if(T)
{
d1  = depth(T->lchild);
d2  = depth(T->rchild);
max = d1 > d2 ? d1 :d2;
   return max+1;                    //体会两个return 体会max+1
}
return 0;

}

int i = 0;

void freetree(BiTree *T)                 //销毁二叉链表

{
if(T)
{
freetree(T->lchild);
   freetree(T->rchild);
free(T);
i++;
}

}

int main()                           

{
BiTree *T;
cout<<"请输入元素(先序遍历),缺少孩子的用‘#’补:"<<endl;

    create(T);
cout<<"前序遍历:";
preorder(T);            cout<<endl;       

    cout<<"中序遍历:";
inorder(T);             cout<<endl;       
cout<<"前序遍历:";
postorder(T);           cout<<endl;      
cout<<"二叉树的深度:"<<depth(T)<<endl;   
freetree(T);
cout<<"共销毁的节点:"<<i<<endl;
return 1;

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