[C++11] 顺序存储的完全二叉树构造树形结构
来源:互联网 发布:java错误等级 编辑:程序博客网 时间:2024/06/06 12:49
我们知道,二叉树有两种基本的存储方式:顺序存储方式和树形存储方式。在用代码实现之前,我们先来分析一下我们的思路:
(1)分析
假定我们采用如下结构来顺序存储一棵二叉树。
不难看出seq是一个动态数组vector,其中的每一个元素都是一个指向type类型的指针(type*)。
对于上面例子中的二叉树,等价于如下表示的树形结构
我们能够很容易的发现两者之间的对应关系:1、seq表示的序列就是二叉树层序遍历的结果;2、设seq的最大下标为n,则n==seq.size()-1。3、假设某一结点下标为 i ,则其左子女的下标为 2*i+1,右子女的下标为2*i+2
(2)构造函数的代码实现
binaryTree(const vector<shared_ptr<type>> seq) { vector<shared_ptr<treeNode<type>>> vec(seq.size()); for(unsigned int i=0;i<seq.size();i++) //第一层循环实现了type*向treeNode*的转换 { if(seq[i]==nullptr) vec[i]=nullptr; else { vec[i]=shared_ptr<treeNode<type>>(new treeNode<type>(*seq[i])); } } for(unsigned int i=0;i<vec.size();i++) { if(vec[i]!=nullptr) //此处判空很关键 { if(2*i+1<vec.size()) vec[i]->LeftChild=vec[2*i+1]; if(2*i+2<vec.size()) vec[i]->RightChild=vec[2*i+2]; } } _root=vec[0]; }
0 0
- [C++11] 顺序存储的完全二叉树构造树形结构
- 完全二叉树的顺序存储
- 第十一周项目1-二叉树构造算法的验证--由顺序存储结构转为二叉链存储结构
- 第十一周 项目1-二叉树构造算法的认证--由顺序存储结构转为二叉链存储结构
- 第11周项目1-(2)二叉树构造算法的验证、由顺序存储结构转为二叉链存储结构
- 二叉树的顺序存储结构
- 基于顺序存储的二叉树结构
- 二叉树的顺序存储结构
- 二叉树的顺序存储结构
- 二叉树的顺序存储结构
- 二叉树的顺序存储结构
- 【数据结构】二叉树的顺序存储结构--遍历二叉树
- 第十一周项目1--(2)二叉树构造算法的验证--由顺序存储结构转为二叉链存储结构
- 第十周项目一 二叉树构造算法的验证---由顺序存储结构转为二叉链存储结构(4)
- 顺序存储完全二叉树的基本操作
- 由顺序方式存储的完全二叉树进行重建
- 12.完全二叉树的顺序存储表示
- C语言数据结构——二叉树的顺序存储结构
- Android HandlerThread
- POJ---2418-Hardwood Species(字典树)
- java面向对象7
- 内存分配以及指针处理的相关测试代码
- Linux程序之线程轮询
- [C++11] 顺序存储的完全二叉树构造树形结构
- Generating Shaders From HLSL Fragments
- java面向对象8
- C# 引用ref/out
- Objective-C 编程语言官网文档(五)-属性的声明
- java面向对象9
- OC基础第四讲:字典
- java应用技术
- GLSL Optimizer