二叉树的高度

时间:2024.4.30

Status ListDelete-Sq(SqList &L,int i,ElemType &e){ if((i<1)||(i>L.length)) return ERROR;

p=&(L.elem[i-1]);

e=*p;

q=L.elem+L.length-1;

for(++p;p<=q;++p)*(p-1)=*p;

- -L.length;

return OK;

}


第二篇:二叉树的建立、输出、结点、高度、叶结点的输出


7 二叉树的操作

【实验简介】二叉树是树形结构的一种重要类型。通过本次实验,熟悉二叉树结点的结构,掌握二叉树的基本操作以及具体实现,学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法。

【实验内容】

编写程序,实现对二叉树的以下操作:

1. 建立二叉树。

2. 按任一种遍历次序输出二叉树中的所有结点。

3. 求二叉树的深度。

4. 求二叉树中的所有节点数。

5. 求二叉树中的所有叶子节点数。

6. 清除二叉树,使之编程一只空树。

【主要代码】#include<iostream>

using namespace std;

template <class T>

struct BinTreeNode //二叉树结点类定义

{ T data; //数据域

BinTreeNode<T> *leftChild, *rightChild; //左子女、右子女链域 BinTreeNode () //构造函数

{ leftChild=NULL;rightChild=NULL; }

BinTreeNode (T x,BinTreeNode<T> *left=NULL,BinTreeNode<T> *right=NULL)

{ data=x; leftChild=left;rightChild=right; }

};

template <class T>

class BinaryTree

{ //二叉树类定义

public:

BinaryTree() {root=NULL;} //构造函数

BinaryTree (T value) //构造函数 {RefValue=value;root=NULL;}

~BinaryTree(){destroy(root);} //析构函数

bool IsEmpty(){ return root==NULL;} //判二叉树空否

int Height(){ return Height(root);} //求树高度

int Size() { return Size(root); } //求结点数

BinTreeNode<T> *getRoot() { return root; }

BinTreeNode<T> *LeftChild (BinTreeNode<T> *cur) //返回左子女 { return (cur!=NULL)?cur->leftChild:NULL; } BinTreeNode<T> *RightChild (BinTreeNode<T> *cur) //返回右子女 { return (cur!=NULL)?cur->rightChild:NULL; }

void Output (BinTreeNode<T> * subtree); //输出结点 void BinaryTreeCount(BinTreeNode<T>* BT,int& m1,int& m2); 输出结点数和叶结点数

1 //

void SetRefValue(T& M){RefValue=M;} //设置数据输入停止标志

void Setroot(BinTreeNode<T>* N){root=N;} //设置根节点 void CreateBinTree (BinTreeNode<T> *& subTree);

protected:

BinTreeNode<T> *root; //二叉树的根指针

T RefValue; //数据输入停止标志

//void CreateBinTree (istream& in, BinTreeNode<T> *& subTree); //从文件读入建树

void destroy (BinTreeNode<T> *& subTree); //删除

int Height (BinTreeNode<T> *subTree)const; //返回树高度

int Size(BinTreeNode<T> *subTree)const; //返回结点数

BinTreeNode<T> *Parent (BinTreeNode<T> * subTree, BinTreeNode<T> *cur); //返回父结点

friend ostream& operator<<(ostream& out,BinaryTree<T>& Tree); };

template<class T>

void BinaryTree<T>::destroy (BinTreeNode<T> *& subTree)

//私有函数: 删除根为subTree的子树

{ if (subTree!=NULL)

{ destroy (subTree->leftChild); //删除左子树

destroy (subTree->rightChild); //删除右子树

delete subTree; //删除根结点

}

};

template <class T>

void BinaryTree<T>::CreateBinTree(BinTreeNode<T> *& subTree) { T item;

cin>>item; //读入根结点的值

if(item!=RefValue)

{ subTree=new BinTreeNode<T>(item); //建立根结点 if (subTree==NULL)

{cerr << "存储分配错!" << endl; exit (1);}

CreateBinTree (subTree->leftChild); //递归建立左子 CreateBinTree (subTree->rightChild);//递归建立右子树 }

else {subTree=NULL;} //封闭指向空子树的指针

};

template <class T>

int BinaryTree<T>::Height(BinTreeNode<T> *subTree)const

{ //私有函数:利用二叉树后序遍历算法计算二叉树的高度或深度; if (subTree==NULL) return 0; //空树高度为0;

else

2

{

int i=Height(subTree->leftChild);

int j=Height(subTree->rightChild);

return (i<j)?j+1:i+1;

}

};

template <class T>

void BinaryTree<T>::BinaryTreeCount(BinTreeNode<T>* BT,int& m1,int& m2)

//分别统计出二叉树中所有结点数和叶子结点数

{

if(BT!=NULL)

{ m1++; //统计所有结点

if(BT->leftChild==NULL&&BT->rightChild==NULL) m2++; //统计叶子结点数

BinaryTreeCount(BT->leftChild,m1,m2);

BinaryTreeCount(BT->rightChild,m1,m2);

}

else return;

return;

};

template <class T>

void BinaryTree<T>::Output (BinTreeNode<T> *subtree)

{//私有函数:利用二叉树后序遍历算法输出二叉树的结点

if (subtree!=NULL)

{

cout<<subtree->data<<'\t'; //输出根节点

Output(subtree->leftChild); //遍历

Output(subtree->rightChild);

}

return;

};

void main()

{

BinaryTree<int> a;

int m=0,n=0,p=0;

BinTreeNode<int> *b;

b=a.getRoot();

a.SetRefValue(p); //设置结束标志

cout<<"请输入要建立的二叉树的整型数,输入0结束,0应比数字多1:"; a.CreateBinTree(b); //创建二叉树

cout<<"二叉树的所有结点为:";

a.Output(b);

3

cout<<'\n'; //输出所有结点

a.Setroot(b);

cout<<"二叉树的高度为:";

cout<<a.Height()<<'\n'; //输出二叉树高度 a.BinaryTreeCount(b,m,n); //输出结点数和叶子结点数

cout<<"二叉树结点数为:"<<m<<'\n'; //结点和叶结点个数输出

cout<<"二叉树叶结点数为:"<<n<<'\n';

a.~BinaryTree(); //删除二叉树

exit(1);

}

//退出 4

更多相关推荐:
二叉树的应用

二叉树的应用一实验目的1使学生熟练掌握二叉树的逻辑结构和存储结构2熟练掌握二叉树的各种遍历算法3熟悉二叉树的应用二实验内容本次实验提供2个题目学生可以根据自己的情况任选一个题目一二叉树的应用问题描述建立一棵二叉...

二叉树的遍历和应用

内蒙古科技大学本科生课程设计说明书题目数据结构课程设计二叉树的遍历和应用学生姓名学号专业班级指导教师20xx年5月29日内蒙古科技大学课程设计说明书内蒙古科技大学课程设计任务书I内蒙古科技大学课程设计说明书目录...

二叉树的基本操作及其应用

广西工学院计算机学院数据结构课程实验报告书实验六二叉树的基本操作及其应用学生姓名学号班级指导老师专业计算机学院软件学院提交日期20xx年6月22日1实验目的1了解二叉树的特点掌握二叉树的主要存储结构2掌握二叉树...

树和二叉树的应用

数据结构实验报告实验题目树和二叉树的应用实验内容重言式判别实验目的掌握树和二叉树的概念及工作原理运用其原理及概念完成上述实验题中的内容实验要求为了使学生更好的掌握与理解课堂上老师所讲的概念与原理实验前每个学生要...

二叉树的应用实验报告

实验报告课程名称数据结构上机实验实验项目二叉树的应用实验仪器PC机系别专业班级学号学生姓名实验日期成绩指导教师实验三二叉树的应用1实验目的掌握二叉树的链式存储结构和常用算法利用哈夫曼树设计最优压缩编码2实验内容...

二叉树的基本操作与应用,完整版

includequotstdiohquotincludequotstdlibhquotincludequotstringhquotincludequotmathhquottypedefcharTElemType...

二叉树应用

includequotstdiohquotincludequotmallochquotdefinemaxsize20规定树中结点的最大数目includequotwindowshquottypedefstruct...

LAB06 二叉树的操作及应用

算法与数据结构实验报告Lab06二叉树的操作及应用实验目的和要求1掌握二叉树顺序存储表示的实现及其基本操作2掌握线索二叉树类型的定义方法会按对称序线索化二叉树和周游对称序线索二叉树3掌握优先队列的实现及其基本操...

《数据结构》实验提示_实验5_二叉树的基本操作和应用

数据结构实验提示实验五二叉树的基本操作和应用1先定义宏再定义元素二叉树的顺序表等的类型并声明顺序表的基本操作示例如下includequotstdafxhquotincludequotstdlibhquotinc...

实验3二叉树的建立及其应用

实验3二叉树的建立及其应用实验目的1熟悉二叉树的存储结构2通过先序序列创建二叉树掌握二叉树的水平输出算法3完成对二叉树进行深度和叶子数目统计的算法4完成对二叉树的中序遍历输出算法实验环境1硬件每个学生需配备计算...

求二叉树的宽度

编写算法求二叉树的宽度求最大宽度可采用层次遍历的方法记下各层节点数取其最大宽度intwidthBiTreebt求二叉树bt的最大宽度ifbtnullreturn0BiTreeQ元素为二叉树节点指针的队列fron...

二叉树及其应用(算法与数据结构课程设计)

二叉树及其应用一问题描述二叉树是一种常见的数据结构在实际中应用十分广泛二叉树有顺序和链式两种存储结构可以运用递归和非递归设计算法能够求解节点在二叉树中的层次数等问题在实际应用中要求以同学录为例完成系统的设计与管...

二叉树的应用(24篇)