为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

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

2022-12-25 4页 doc 41KB 4阅读

用户头像 个人认证

is_218625

暂无简介

举报
二叉树的建立、输出、结点、高度、叶结点的输出PAGEPAGE17二叉树的操作【实验简介】二叉树是树形结构的一种重要类型。通过本次实验,熟悉二叉树结点的结构,掌握二叉树的基本操作以及具体实现,学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法。【实验内容】编写程序,实现对二叉树的以下操作:建立二叉树。按任一种遍历次序输出二叉树中的所有结点。求二叉树的深度。求二叉树中的所有节点数。求二叉树中的所有叶子节点数。清除二叉树,使之编程一只空树。【主要代码】#includeusingnamespacestd;templatestructBinTreeNode//...
二叉树的建立、输出、结点、高度、叶结点的输出
PAGEPAGE17二叉树的操作【实验简介】二叉树是树形结构的一种重要类型。通过本次实验,熟悉二叉树结点的结构,掌握二叉树的基本操作以及具体实现,学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法。【实验】编写程序,实现对二叉树的以下操作:建立二叉树。按任一种遍历次序输出二叉树中的所有结点。求二叉树的深度。求二叉树中的所有节点数。求二叉树中的所有叶子节点数。清除二叉树,使之编程一只空树。【主要代码】#includeusingnamespacestd;templatestructBinTreeNode//二叉树结点类定义{Tdata;//数据域BinTreeNode*leftChild,*rightChild;//左子女、右子女链域BinTreeNode()//构造函数{leftChild=NULL;rightChild=NULL;}BinTreeNode(Tx,BinTreeNode*left=NULL,BinTreeNode*right=NULL){data=x;leftChild=left;rightChild=right;}};templateclassBinaryTree{//二叉树类定义public:BinaryTree(){root=NULL;}//构造函数BinaryTree(Tvalue)//构造函数{RefValue=value;root=NULL;}~BinaryTree(){destroy(root);}//析构函数boolIsEmpty(){returnroot==NULL;}//判二叉树空否intHeight(){returnHeight(root);}//求树高度intSize(){returnSize(root);}//求结点数BinTreeNode*getRoot(){returnroot;}BinTreeNode*LeftChild(BinTreeNode*cur)//返回左子女{return(cur!=NULL)?cur->leftChild:NULL;}BinTreeNode*RightChild(BinTreeNode*cur)//返回右子女{return(cur!=NULL)?cur->rightChild:NULL;}voidOutput(BinTreeNode*subtree);//输出结点voidBinaryTreeCount(BinTreeNode*BT,int&m1,int&m2);//输出结点数和叶结点数voidSetRefValue(T&M){RefValue=M;}//设置数据输入停止标志voidSetroot(BinTreeNode*N){root=N;}//设置根节点voidCreateBinTree(BinTreeNode*&subTree);protected:BinTreeNode*root;//二叉树的根指针TRefValue;//数据输入停止标志//voidCreateBinTree(istream&in,BinTreeNode*&subTree);//从文件读入建树voiddestroy(BinTreeNode*&subTree);//删除intHeight(BinTreeNode*subTree)const;//返回树高度intSize(BinTreeNode*subTree)const;//返回结点数BinTreeNode*Parent(BinTreeNode*subTree,BinTreeNode*cur);//返回父结点friendostream&operator<<(ostream&out,BinaryTree&Tree);};templatevoidBinaryTree::destroy(BinTreeNode*&subTree)//私有函数:删除根为subTree的子树{if(subTree!=NULL){destroy(subTree->leftChild);//删除左子树destroy(subTree->rightChild);//删除右子树deletesubTree;//删除根结点}};templatevoidBinaryTree::CreateBinTree(BinTreeNode*&subTree){Titem;cin>>item;//读入根结点的值if(item!=RefValue){subTree=newBinTreeNode(item);//建立根结点if(subTree==NULL){cerr<<"存储分配错!"<leftChild);//递归建立左子CreateBinTree(subTree->rightChild);//递归建立右子树}else{subTree=NULL;}//封闭指向空子树的指针};templateintBinaryTree::Height(BinTreeNode*subTree)const{//私有函数:利用二叉树后序遍历算法计算二叉树的高度或深度;if(subTree==NULL)return0;//空树高度为0;else{inti=Height(subTree->leftChild);intj=Height(subTree->rightChild);return(ivoidBinaryTree::BinaryTreeCount(BinTreeNode*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);}elsereturn;return;};templatevoidBinaryTree::Output(BinTreeNode*subtree){//私有函数:利用二叉树后序遍历算法输出二叉树的结点if(subtree!=NULL){cout<data<<'\t';//输出根节点Output(subtree->leftChild);//遍历Output(subtree->rightChild);}return;};voidmain(){BinaryTreea;intm=0,n=0,p=0;BinTreeNode*b;b=a.getRoot();a.SetRefValue(p);//设置结束标志cout<<"请输入要建立的二叉树的整型数,输入0结束,0应比数字多1:";a.CreateBinTree(b);//创建二叉树cout<<"二叉树的所有结点为:";a.Output(b);cout<<'\n';//输出所有结点a.Setroot(b);cout<<"二叉树的高度为:";cout<
/
本文档为【二叉树的建立、输出、结点、高度、叶结点的输出】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索