abc的先序二叉树
来源:互联网 发布:10月经济数据 统计局 编辑:程序博客网 时间:2024/06/08 19:40
先序序列:abc
中序序列:bac
后序序列:bca
层次序列:abc
1. 工程的建立
头文件
typedef char TElemType;
typedef int Status;
#defineMAX 100
typedef struct BiTNode{
TElemTypedata;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
Status CreateBiTree(BiTree &T); //按照先序次序输入二叉树中的结点的值(一个字符),空格字符表示空树。
Status PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e)); // 先序遍历二叉树。
Status InOrderTraverse(BiTree T,Status(*Visit)(TElemType e)); //中序遍历二叉树。
Status PostOrderTraverse(BiTree T,Status(*Visit)(TElemType e)); //后续遍历二叉树
Status LevelOrderTraverse(BiTreeT,Status (*Visit)(TElemType e)); //层次遍历二叉树
Status Visit(TElemType e);
Status Length(BiTree T); //树深度
StatusCountNode(BiTree T); //树的结点总数
主函数
// Tree.cpp : Defines theentry point for the console application.
//
#include "stdafx.h"
#include "tree.h"
using namespace std;
intmain(int argc,char*argv[])
{
//printf("Hello World!\n");
BiTreeT;
int c,l=0;
printf("输入二叉树:\n");
CreateBiTree(T);
printf("按照先序排序:\n");
PreOrderTraverse(T,Visit);
printf("\n按照中序排序:\n");
InOrderTraverse(T,Visit);
printf("\n按照后序排序:\n");
PostOrderTraverse(T,Visit);
printf("\n按照层次排序:\n");
c=LevelOrderTraverse(T,Visit);
l=Length(T);
printf("\n");
printf("\n树的深度为:%d\n",l);
l=CountNode(T);
printf("\n树的结点总数;%d\n",l);
system("pause");
return 0;
}
内容:
二叉树的创建
Status CreateBiTree(BiTree &T) //按照先序次序输入二叉树中的结点的值(一个字符),空格字符表示空树。
{
char ch;
cin.get(ch);
if(ch==' ')
T=NULL;
else
{
if(!(T=(BiTree)malloc(sizeof(BiTNode))))
exit(OVERFLOw);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}
该二叉树采用先序输入(注:要输入对应的空格)
先序遍历二叉树
Status PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e)) // 先序遍历二叉树。
{
if(T)
{
if(Visit(T->data))
if(PreOrderTraverse(T->lchild,Visit))
if(PreOrderTraverse(T->rchild,Visit))
return OK;
return ERROR;
}
return OK;
}
中序遍历二叉树
Status InOrderTraverse(BiTree T,Status(*Visit)(TElemType e)) //中序遍历二叉树。
{
if(T)
{
if(PreOrderTraverse(T->lchild,Visit))
if(Visit(T->data))
if(PreOrderTraverse(T->rchild,Visit))
return OK;
return ERROR;
}
return OK;
}
后续遍历二叉树
Status PostOrderTraverse(BiTree T,Status(*Visit)(TElemType e)) //后续遍历二叉树
{
if(T)
{
if(PreOrderTraverse(T->lchild,Visit))
if(PreOrderTraverse(T->rchild,Visit))
if(Visit(T->data))
return OK;
return ERROR;
}
return OK;
}
层次遍历二叉树
Status LevelOrderTraverse(BiTreeT,Status (*Visit)(TElemType e)) //层次遍历二叉树
{
BiTree a[MAX];
int i,j; //i尾 j为头
i=j=0;
BiTreep=T;
if(p!=NULL)
{
a[i]=p;
while(j<=i&&a[j]!=NULL)
{
p=a[j];
i++;
Visit(p->data);
if(p->lchild!=NULL)
{
a[i]=p->lchild;
i++;
}
if(p->rchild!=NULL)
{
a[i]=p->rchild;
i++;
}
j++;
}
}
return OK;
}
Visit 函数的编写
Status Visit(TElemType e)
{
printf("%c ",e);
return OK;
}
深度
Status Length(BiTree T)
{
int L1,L2;
if(T==NULL)
return 0;
L1=Length(T->lchild)+1;
L2=Length(T->rchild)+1;
if(L1>L2)
return L1;
else
return L2;
}
结点数
Status CountNode(BiTree T)
{
int sum;
if(T==NULL)
return 1;
else
{
sum=CountNode(T->lchild);
sum=CountNode(T->rchild);
return sum+1;
}
}
- abc的先序二叉树
- 二叉树的先序建立及先序遍历:
- 二叉树的先序遍历
- 二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- C++二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- 求二叉树的先序遍历
- Curator使用demo
- Linux中listen函数的backlog参数含义
- html 输入框 只能输入数字 只能输入字母数字组合
- SQL日期操作函数及示例
- PHP扩展类JpGraph绘制统计图像 (一) 图表绘制
- abc的先序二叉树
- 常见对象-Character
- maven插件安装
- Java找出无权无向图的最短路径
- 程序员,如何从平庸走向理想?
- C语言,函数的调用过程(栈帧)
- android 4.3相册选取截图“无法加载图片”问题
- UIFramework之Unity4.x 场景管理策略
- Excel Sheet Column Number