从数组构造二叉树代码
来源:互联网 发布:mysql pxc 架构 编辑:程序博客网 时间:2024/04/30 02:57
最近做二叉树的题目,写完代码想在本地编译运行,结果一时半会想不起树如何构造。而网上竟然也没有类似代码,于是自己写了个。
约定:二叉树采用宽度优先遍历来数组化,二叉树的节点按照BFS的顺序依次存储在数组内,数组中的’#’代表空节点,末尾的’#’可省略。
如:
1 / \ 2 3 / \ \4 5 6 / \ 7 8
这棵树会被序列化为:{1,2,3,4,5,#,6,#,#,7,8},后面的四个#被省略。
7 / \ 2 8 / \ \ 1 6 10 / / \ 3 9 11 \ 5 / 4//数组应该为{7,2,8,1,6,#,10,#,#,3,#,#,#,9,11,#,#,#,#,#,5,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,4}
#include <iostream>#include <vector>#include <algorithm>using namespace std;//二叉树的节点定义class TreeNode { public: int val; TreeNode *left, *right; TreeNode(int val) { this->val = val; this->left = this->right = NULL; }};//从数组的某个位置的元素开始生成树TreeNode* createTree(vector<int> list, int start){ if (list[start] == '#') { return NULL; } TreeNode* root = new TreeNode(list[start]); int lnode = 2*start + 1; int rnode = 2*start + 2; if ( lnode > list.size() -1) { root -> left = NULL; }else{ root -> left = createTree(list, lnode); } if (rnode > list.size() -1) { root -> right =NULL; }else{ root -> right = createTree(list, rnode); } return root;}//先序遍历函数void PreOrderTraverse(TreeNode *T) { if(T) { cout<<T->val<<" "; PreOrderTraverse(T->left); PreOrderTraverse(T->right); } return;}int main(){ vector<int> datanum = {1,2,3,4,5,'#',6,'#','#',7,8}; //1,2,3,4,5,'#',6,'#','#',7,8,'#','#','#','#' 后面的#可省略 TreeNode *t; t = createTree(datanum, 0); printf("The pre order is : "); PreOrderTraverse(t); //下面就可以用构造出的树做测试了 return 0;}
1 0
- 从数组构造二叉树代码
- 从有序队列构造平衡二叉树
- 【难】【二叉树】构造数组的MaxTree
- 二叉树和数组的构造转换
- c语言构造数组二叉树
- 用数组构造一个二叉树
- 构造数组的MaxTree(二叉树)
- 从数组创建完全二叉树
- 构造完全二叉树,并按行从左到右输出
- 构造排序二叉树,并按行从左到右输出
- 编程算法 - 数组构造二叉树并打印
- 二叉树数组实现[C/C++]代码
- 二叉树构造与遍历的C程序实现代码
- 数组实现根据二叉树的先序遍历和中序遍历构造二叉树
- 用数组构造一般二叉树(完全二叉树较多案例啦)
- 构造平衡二叉树
- 二叉树的构造
- 遍历构造二叉树
- 剖析Spring之Spring Data JPA
- 拖拽效果的实现
- 使用 spring 容器管理 Servlet
- android 开发中找不到org.apache.http包以及相应的类
- sun.management.ManagementFactory is not visible
- 从数组构造二叉树代码
- 【SPOJ VLATTICE】Visible Lattice Points——莫比乌斯反演3
- SQL生成周辅助表
- 平台中表或视图不存在(系统表)
- 各分类算法优缺点
- SQL错误
- 报错:Missing artifact.com.oracle:ojdbc14:10.0.2.0
- android绘制图形总结
- initWithFrame 和 initWithCoder