二叉链表(C++引用实现)
来源:互联网 发布:java开发经验总结 编辑:程序博客网 时间:2024/05/22 15:08
#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;
}
- 二叉链表(C++引用实现)
- C语言递归实现二叉链表
- 二叉树(二叉链表实现)
- 用引用实现二叉树
- 二叉搜索树挂链表实现文件C语言
- 数据结构之---C语言实现二叉树的二叉链表存储表示
- c语言实现二叉树的基本操作--二叉链表存储
- 二叉链表的实现(二叉树)
- 二叉树的二叉链表存储(java实现)
- 二叉树的基本操作 (二叉链表实现)
- 二叉查找树(c语言实现)
- 二叉树,红黑树 (C 实现)
- 二叉树的基本功能实现(c++)
- 二叉树遍历(c/c++实现)
- 二叉树实现排序(C语言)
- 数据结构(C实现)------- 遍历二叉树
- 二叉搜索树(c实现)
- 数据结构:二叉树的实现(C++)
- iOS NSDate
- 设置Mac的输入法切换快捷键
- 为你的App增加托盘图标
- ucos 任务就绪表及任务调度
- Tab与TabHost
- 二叉链表(C++引用实现)
- MFC获取本机IP地址
- C语言 - 判断任意数的每位数是否为偶数【两种方法】
- 每日一算法:骑士遍历问题
- 二叉查找树的插入、删除、遍历和查找等C++实现
- #小练习 使用正则抓取oschina博客专区首页数据
- 百度地图之根据范围和检索词发起范围检索
- Java文档注释摘要
- Java网络编程的socket函数与参数