二叉树算法设计
来源:互联网 发布:州长夫人 知乎 编辑:程序博客网 时间:2024/05/22 04:27
二叉树算法设计
【可操作的菜单项目】
(1) 创建二叉树;
(2) 显示二叉树
(3) 求树高
(4) 统计叶子结点
【基本要求】
(1)建立含有若干个元素的二叉链表,要求从文件读入数据,显示函数公用。
(2)计算并显示二叉树的高度。
(3)计算并显示二叉树叶子结点数。
执行程序:
代码:
#include<iostream>
using namespace std;
#include"c.cpp"
void main()
{
char zxz;
int c=0;
while(!c)
{
cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆二叉树算法设计☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
cout<<"★ A 创建二叉树 ★"<<endl;
cout<<"☆ B 显示二叉树 ☆"<<endl;
cout<<"★ C 求树高 ★"<<endl;
cout<<"☆ D 统计叶子节点 ☆"<<endl;
cout<<"★ E 结束 ★"<<endl;
cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
cout<<" 请输入A~E进行选择: ";
cin>>zxz;
BiTree T;
switch(zxz)
{
case 'A' :
{
cout<<"请按先序次序输入各结点的值,以#表示空树(输入时可连续输入): "<<endl;
cout<<"创建二叉树:"<<endl;
CreateBiTree( T);
break;
}
case 'B' :
{
cout<<"显示二叉树 "<<endl;
PrintBiTree(T);
cout<<endl;
break;
}
case 'C' :
cout<<"求树高 "<<Height(T)<<endl;
break;
case 'D' :
cout<<"统计叶子节点 "<<countleaf(T)<<endl;
cout<<endl;
break;
case 'E' : cout<<" 结束!!!"<<endl; c=1; break;
default:
cout<<" 出错,重新选择!"<<endl;
}
}
}
#include <stdio.h>
#include <iostream>
#include <queue>
#include <stack>
#include <malloc.h>
#define SIZE 100
using namespace std;
typedef struct BiTNode //定义二叉树节点结构
{
char data; //数据域
struct BiTNode *lchild,*rchild; //左右孩子指针域
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T); //生成一个二叉树
void PrintBiTree ( BiTree &T);//显示二叉树
void CreateBiTree(BiTree &T)
{
char ch;
cin>>ch; //读入一个字符
if(ch=='#') T= NULL;
else
{
T=(BiTNode *)malloc(sizeof(BiTNode)); //生成一个新结点
T->data=ch;
CreateBiTree(T->lchild); //生成左子树
CreateBiTree(T->rchild); //生成右子树
}
}
//显示二叉树
void PrintBiTree ( BiTree &T) { //输出二叉树的算法
if ( T != NULL ) { //树为空时结束递归
cout << T -> data ; // 输出根结点的值
if (T -> lchild != NULL || T -> rchild != NULL ) {
cout <<'(' ; // 输出左括号
PrintBiTree (T -> lchild); // 输出左子树
cout <<',' ; // 输出逗号分隔符
if ( T -> rchild != NULL )
PrintBiTree (T -> rchild); // 输出右子树
cout <<')' ; } // 输出右括号
}
}
//求树高
int Height(BiTree &T)
{
int h1;
int h2;
if(!T)
{
return 0;
}
else
{
h1=Height(T->lchild);
h2=Height(T->rchild);
if(h1>=h2)return 1+h1;
else return 1+h2;
}
}
//求叶子的结点
int countleaf(BiTree &T)
{
if(!T)
return 0; //空树,无叶子
else if(!T->lchild && !T->rchild)
return 1;
else
return (countleaf(T->lchild) + countleaf(T->rchild));
}
- 二叉树算法设计
- 算法设计学习:二叉树算法
- 第五章:树和二叉树之算法设计题
- 算法设计与分析基础-8.3、最优二叉查找树
- 设计一个算法,按照层次打印这棵二叉树。
- 算法设计与分析 最优二叉搜索树 动态规划
- [Java算法分析与设计]二叉树的遍历
- 【算法设计-二叉树遍历】二叉树的递归与非递归遍历方法
- 【算法设计-二叉搜索树】二叉查找树的操作与实现
- 设计一个算法,判断一个二叉树是否为完全二叉树
- [牛客]有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。
- 二叉树类型设计
- 二叉树采用二叉链表存储,设计算法判断给定的二叉树是否是一棵完全二叉树,采用先进先出的队列。
- 线索二叉树算法
- 数据结构-二叉树算法
- 【算法】二叉树
- 二叉树相关算法
- 二叉树相关算法
- Gas Station
- 安装Python的机器学习包Sklearn 出错解决方法
- H.264 JM86 VC++6.0执行
- webconfig下面,写customererror 如果不是 off
- poj 2151 Check the difficulty of problems
- 二叉树算法设计
- php实现页面跳转的方法
- 数据结构 第五章 树和二叉树
- Go 1.4 Beta 1发布,12月发布正式版本
- CSS样式:把一个段中的几个短语颜色设置成不同于文本的颜色,用span标签。
- C# 动态执行批处理命令
- 数据结构 第五章 树和二叉树
- 求第20个Fibnacci序列的值
- 数据结构第五章