⽤⼆叉链表存储的⼆叉树进⾏先序、中序和后序遍历的算法
⽤⼆叉树链表作为存储结构,完成⼆叉树的建⽴,先序、中序和后序以及按层次遍历的操作,求所有叶⼦及结点总数的操作
#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;
}
el
{
*T=(BiTree)malloc(sizeof(BiTnode) );
if(!(*T))
{
exit(-1);
}
el
{
(*T)->data=ch;
printf("请输⼊%d的左节点的值",ch);
create(&(*T)->Lchild);
printf("请输⼊%d的右节点的值",ch);
create(&(*T)->Rchild);
}
}
return 1;
}
void Traver(BiTree T)//前序遍历⼆叉树
{
if(NULL==T)
{
return;
}
el
{
printf("%d ",T->data);
Traver(T->Lchild);
孕期同房姿势Traver(T->Rchild);
志字开头的成语}
}
//中序遍历⼆叉树
void midTraver(BiTree T)
{
if(T==NULL){return;}
midTraver(T->Lchild);
printf("%d ",T->data);
midTraver(T->Rchild);
}
//后序遍历⼆叉树
void lasTraver(BiTree T)
{
if(T==NULL){return;}
lasTraver(T->Lchild);
lasTraver(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);
hairdo
printf("先序遍历⼆叉树:\n");
Traver(T);
printf("\n");
printf("中序遍历⼆叉树:\n");
midTraver(T);
安全风险分级管控制度
printf("\n");
printf("后序遍历⼆叉树:\n");
printf("后序遍历⼆叉树:\n");
lasTraver(T);
printf("\n");
deepth=TreeDeep(T);
printf("树的深度:%d\n",deepth);
printf("\n");
Leafcount(T,num);
printf("⼆叉树的叶⼦节点个数为:%d\n",num); printf("\n");
return 0;
}