博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基础数据结构-二叉树-拓展:基于数组存储的构建
阅读量:7079 次
发布时间:2019-06-28

本文共 2648 字,大约阅读时间需要 8 分钟。

用数组存储与前文是类似的,只是换了一个储存方式,有兴趣可以看一下下面的代码,具体就不解释了。

#include
#include
using namespace std;class BiTreeNode{public: char data; //结点数据 BiTreeNode *LeftChild; //左子树指针 BiTreeNode *RightChild; //右子树指针 BiTreeNode():LeftChild(NULL),RightChild(NULL){} ~BiTreeNode(){}};class BiTree{private: BiTreeNode *Root; //根结点指针 int pos,len; string strTree; BiTreeNode *CreateBiTree(int pos); void PreOrder(BiTreeNode *t); void InOrder(BiTreeNode *t); void PostOrder(BiTreeNode *t);public: BiTree(){}; ~BiTree(){}; void CreateTree(string TreeArray); void PreOrder(); void InOrder(); void PostOrder();};//构造二叉树,利用先序遍历结果建树void BiTree::CreateTree(string TreeArray) //公有函数,对外接口{ len = TreeArray.length(); //输入数组的长度 strTree.assign(TreeArray); //将输入的数组转存到类的数据strTree中 Root = CreateBiTree(0); //从数组0开始读数据}BiTreeNode *BiTree::CreateBiTree(int pos) //在pos位置递归建树,私有函数,类内实现{ //用参数pos传递当前结点在数组的位置,二叉树性质5,因为数组从0开始编号,父结点是i,左右孩子位置是2i+1,2i+2 BiTreeNode *T; //临时指针T int ch; if(pos>strTree.length()) return NULL; ch=strTree[pos]; if(ch=='0') T = NULL; else { T = new BiTreeNode(); T->data = ch; //生成根结点 if(2*(pos+1) <= len) T->LeftChild = CreateBiTree(2*(pos+1)-1); if(2*(pos+1)+1 <= len) T->RightChild = CreateBiTree(2*(pos+1)); } return T;}//定义先序遍历函数void BiTree::PreOrder() //公有函数,对外接口{ PreOrder(Root);}void BiTree::PreOrder(BiTreeNode *t) //私有函数,类内实现{ if(t!=NULL) { cout << t->data; //输出当前结点t的数据,表示t已经访问 PreOrder(t->LeftChild); //先序遍历t的左孩子 PreOrder(t->RightChild); //先序遍历t的右孩子 }}//定义中序遍历函数void BiTree::InOrder() //公有函数,对外接口{ InOrder(Root);}void BiTree::InOrder(BiTreeNode *t) //私有函数,类内实现{ if(t) { InOrder(t->LeftChild); //中序遍历t的左孩子 cout << t->data; //输出当前结点t的数据,表示t已经访问 InOrder(t->RightChild); //中序遍历t的右孩子 }}//后序遍历函数void BiTree::PostOrder() //公有函数,对外接口{ PostOrder(Root);}void BiTree::PostOrder(BiTreeNode *t) //私有函数,类内实现{ if(t) { PostOrder(t->LeftChild); //后序遍历t的左孩子 PostOrder(t->RightChild); //后序遍历t的右孩子 cout << t->data; //输出当前结点t的数据,表示t已经访问 }}int main(void){ int t; BiTree T; string str; cin >> t; for(int i=0;i
> str; T.CreateTree(str); T.PreOrder(); cout << endl; //T.InOrder(); //cout << endl; //T.PostOrder(); //cout << endl; } return 0;}

 

转载于:https://www.cnblogs.com/nathaneko/p/6491927.html

你可能感兴趣的文章
转 jQuery插件Highcharts、flexigrid实践
查看>>
Windows Phone 8 SDK RC 版推出
查看>>
Database2Sharp代码生成工具使用心得
查看>>
稀疏矩阵的十字链表存储
查看>>
【算法导论第13章】红黑树
查看>>
对PostgreSQL中bufmgr.c 中 bufs_to_lap的初步理解
查看>>
Windows 内存分析之路 --How to use Resource Monitor
查看>>
文件上传
查看>>
理解maven的核心概念
查看>>
一个简单的名片管理程序(C#)
查看>>
max tablename length limit in MySQL is 64
查看>>
Ubuntu 12.04 中国科学技术大学源
查看>>
(转)c#实现WinRAR解压缩
查看>>
MIME
查看>>
NetworkInterface的使用
查看>>
在IIS上启用Gzip压缩(HTTP压缩)
查看>>
解决ImportError: cannot import name webdriver
查看>>
如何将Windows Server 2012的Evaluation版本转为正式版?
查看>>
[iOS] UITextField隐藏软键盘心得(隐藏自身软键盘、点击Return自动转到下个文本框、轻触背景隐藏软键盘)...
查看>>
hdu 1853(Cyclic Tour)
查看>>