二叉树的类定义_二叉树定义
二叉树的类定义由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“二叉树定义”。
实验一、二叉树的类定义
程序说明
1、改程序用二叉链存储结构将其生成一棵二叉树;
2、分别用三种遍历算法将二叉树的遍历序列输出;
3、用括号表示法输出二叉树。
二叉树的形状
A
程序代码
#include “stdafx.h” #include using std::cin;using std::cout;using std::endl;using namespace std;typedef struct CZYP_BTNode {
char data;
struct CZYP_BTNode *left;
//左孩子指针
struct CZYP_BTNode *right;// 右孩子指针
} *BiTree;
void CreateBiTree(BiTree &T){
// 在先序遍历二叉树的过程中输入二叉树的“先序字符串”,// 建立根指针为 T的二叉链表存储结构。在先序字符串中,// 字符'#'表示空树,其它字母字符为结点的数据元素
char ch;
cin >> ch;
if(ch=='#')
{
T=NULL;// 建空树
} else {
T = new CZYP_BTNode;
// “访问”操作为生成根结点
T->data = ch;
CreateBiTree(T->left);
// 递归建(遍历)左子树
CreateBiTree(T->right);
// 递归建(遍历)右子树
}
}
//先序遍历以T为根指针的二叉树 void PreOrder(BiTree &T){
if(T)
{
// T=NULL时,二叉树为空树,不做任何操作
coutdata
PreOrder(T->left);
// 先序遍历左子树
PreOrder(T->right);
// 先序遍历右子树
} }
//中序遍历以T为根指针的二叉树 void InOrder(BiTree &T){
if(T){
// T=NULL时,二叉树为空树,不做任何操作
InOrder(T->left);// 先序遍历左子树
coutdata
InOrder(T->right);// 先序遍历右子树
} } //后序遍历以T为根指针的二叉树 void PostOrder(BiTree &T){
if(T){
// T=NULL时,二叉树为空树,不做任何操作
PostOrder(T->left);// 先序遍历左子树
PostOrder(T->right);// 先序遍历右子树
coutdata
} } //用括号表示法输出二叉树 void DispBTree(BiTree &bt){ if(bt!=NULL){
coutdata;
if(bt->right!=NULL||bt->left!=NULL)
{
cout
DispBTree(bt->left);
if(bt->right!=NULL)cout
DispBTree(bt->right);
cout
} } }
int main(){
cout
BiTree T;
CreateBiTree(T);
cout
PreOrder(T);
cout
InOrder(T);
cout
PostOrder(T);
cout
return(0);}
心得体会
在这次实验中,我花了很多的时间。最重要的体会就是我的知识却是很少。在做这次试验之前我仔细的看了一遍树的三种遍历的伪代码。对程序中用到的递归思想有了更深刻的认识,并且我也借鉴了老师PPT上的很多程序的写法。再者就是我从网上找了一些二叉树的写法,然后通过自己修改、调试。在这里我想说一下,我调试的时候很多错误都不知道从哪里找,后来我就把出现的错误信息输入到baidu里,事实证明这样确实很有效。终于没有错误了。Happy!!
今天调试了一上午,虽说很累,但是我确确实实感到学到了很多知识。不足之处
这个程序的int isEmpty()函数没有实现,需要改天写出来。
一、给定二叉树如下图所示,编程完成下列要求:
1、用二叉链存储结构将其生成一棵二叉树;
2、分别用三种遍历算法将二叉树的遍历序列输出;
3、用括号表示法输出二叉树。G D B E A
C F H 上面是个图。。由于我分不多了,所以不是很多。但是我很想学这方面知识,到时我有分了再给你叫啊。高手帮忙啊。问题补充:
我把图详细说下。A是树根;B、C分别是A的左右孩子;D、E分别是B的左右孩子;G是D的右孩子;F是C的右孩子;H是F的左孩子。相信我已经表达清楚了吧。谢谢各位大虾了。