二叉链表(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;
}
#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;
}
相关文章推荐
- [数据结构]二叉树之二叉链表的类模板实现
- 二叉树的二叉链表实现
- 二叉树(二叉链表实现)JAVA代码
- 谈遍历二叉树的方法(实例列举二叉链表实现二叉树) 推荐
- c语言实现二叉树的基本操作--二叉链表存储
- C++实现二叉树之二叉链表
- 二叉树的二叉链表存储及其Java实现
- C语言实现二叉链表存储
- 二叉链表的遍历实现
- 层次遍历方法建树,用队。实现树与孩子兄弟二叉链表的转化!
- 树:二叉链表的实现
- 采用二叉链表结构实现二叉树,并以递归遍历思想实现二叉树的创建、二叉树的遍历(先序、中序、后序和层次遍历)
- AVL树实现类——二叉链表实现
- Binary Tree(二叉树)的二叉链表实现
- 二叉树的二叉链表表示与实现
- 看数据结构写代码(31)树的二叉链表的实现
- c++数据结构 二叉链表的实现
- 二叉链表的定义与基本操作实现函数
- 二叉树的二叉链表表示与实现
- 数据结构之---C语言实现二叉树的二叉链表存储表示