用二叉链表存储的二叉树进行先序、中序和后序遍历的算法
来源:互联网 发布:淘宝更换支付宝账户 编辑:程序博客网 时间:2024/06/05 04:35
用二叉树链表作为存储结构,完成二叉树的建立,先序、中序和后序以及按层次遍历的操作,求所有叶子及结点总数的操作
#include<iostream>
#include<cstdio>
#include<stdlib.h>
using namespace std;
typedef int Elemtype;
typedef struct BiTnode
{
Elemtype data;//数据域
struct BiTnode* Lchild,*Rchild; //左右子树域;
}BiTnode,*BiTree;
int create(BiTree *T)
{
Elemtype ch;
Elemtype temp;
scanf("%d",&ch);
temp=getchar();
if(ch==-1)
{
*T=NULL;
}
else
{
*T=(BiTree)malloc(sizeof(BiTnode) );
if(!(*T))
{
exit(-1);
}
else
{
(*T)->data=ch;
printf("请输入%d的左节点的值",ch);
create(&(*T)->Lchild);
printf("请输入%d的右节点的值",ch);
create(&(*T)->Rchild);
}
}
return 1;
}
void Traverse(BiTree T)//前序遍历二叉树
{
if(NULL==T)
{
return;
}
else
{
printf("%d ",T->data);
Traverse(T->Lchild);
Traverse(T->Rchild);
}
}
//中序遍历二叉树
void midTraverse(BiTree T)
{
if(T==NULL){return;}
midTraverse(T->Lchild);
printf("%d ",T->data);
midTraverse(T->Rchild);
}
//后序遍历二叉树
void lasTraverse(BiTree T)
{
if(T==NULL){return;}
lasTraverse(T->Lchild);
lasTraverse(T->Rchild);
printf("%d ",T->data);
}
//求二叉树的深度
int TreeDeep(BiTree T)
{
int deep=0;
if(T)
{
int leftdeep=TreeDeep(T->Lchild);
int rightdeep=TreeDeep(T->Rchild);
deep=leftdeep>=rightdeep?leftdeep+1:rightdeep+1;
}
return deep;
}
//求二叉树叶子节点个数
int Leafcount(BiTree T,int &num)
{
if(T)
{
if(T->Lchild==NULL&&T->Rchild==NULL)
{
num++;
}
Leafcount(T->Lchild,num);
Leafcount(T->Rchild,num);
}
return num;
}
int main()
{
BiTree T;
BiTree *p=(BiTree*)malloc(sizeof(BiTree));
int deepth=0,num=0;
printf("请输入第一个节点的值,-1代表没有叶节点:\n");
create(&T);
printf("先序遍历二叉树:\n");
Traverse(T);
printf("\n");
printf("中序遍历二叉树:\n");
midTraverse(T);
printf("\n");
printf("后序遍历二叉树:\n");
lasTraverse(T);
printf("\n");
deepth=TreeDeep(T);
printf("树的深度:%d\n",deepth);
printf("\n");
Leafcount(T,num);
printf("二叉树的叶子节点个数为:%d\n",num);
printf("\n");
return 0;
}
- 用二叉链表存储的二叉树进行先序、中序和后序遍历的算法
- (1)建立二叉树的二叉链表。 (2)写出对用二叉链表存储的二叉树进行先序、中序和后序遍历的递归和非递归算法。 (3)写出对用二叉链表存储的二叉树进行层次遍历算法。 (4)求二叉树的所有叶子及结点总数。
- 建立二叉树,实现二叉树的先序遍历、中序和后序遍历的非递归算法
- 二叉树的先序,中序和后序遍历的非递归算法
- 由先序遍历和中序遍历构造二叉树的二叉链表代码
- 二叉树的先、中、后序遍历及层次遍历的迭代版算法
- 二叉树树的先序遍历,中序遍历和后序遍历
- 根据中序遍历和后序遍历求二叉树的先序遍历
- 已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历
- 已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历
- 二叉树的遍历(先序、中序、后序)
- 二叉树的先序、中序、后序遍历
- 二叉树的遍历:先序、中序、后序
- 二叉树的先序、中序、后序遍历
- 二叉树的先序、中序、后序遍历
- 二叉树的先序,中序,后序遍历
- 二叉树的先序、中序、后序遍历
- 二叉树的先序,中序,后序遍历
- 内轮差编辑内轮差
- PHP中图片上传
- AndroidStudio上传项目到Bintray jCenter
- Cocos Creator Tiledmap——入门知识整理
- 关于浏览器主页被hao123等页面篡改的解决方法
- 用二叉链表存储的二叉树进行先序、中序和后序遍历的算法
- 你为什么赚的这么少,也许是赚钱姿势不对
- LeetCode 31
- Linux 习题1
- hdu 1017 A Mathematical Curiosity
- Mybatis的批量插入与更新
- 用USB无线网卡在新平台全新移植并构建Linux无线网络
- Unity LZMA GZIP 压缩、解压文件 和 打包文件夹 (支持进度回调)
- Java 多线程(PART XX) TimerTask