由已知的层次遍历序列构建二叉树
来源:互联网 发布:无线网修复软件 编辑:程序博客网 时间:2024/05/16 02:19
问题描述:已知一个完全二叉树的顺序存储序列,顺序存储在一个数组中,由该序列构建二叉链表,序列中空节点用‘#’表示,结果返回根节点指针。
解题思路:由二叉树的性质可知,设编号为i的节点的父节点的编号为i/2,左孩子的编号为2i,右孩子的编号为2i+1;
typedef char ElemType;
typedef struct tree_node{
ElemType data;
tree_node * left_child;
tree_node *right_child;
}tree_node,*tree;
tree create_tree(ElemType * elem,int last){
int i=1;
tree * node_array=(tree *)malloc(sizeof(tree)*(last+1)); //存储所有节点的指针
tree root=(tree_node*)malloc(sizeof(tree_node));
root->data=elem[1];
node_array[1]=root; //构建根节点
for(i=2;i<=last;i++){
if(elm[i]=='#') {
node_array[i]=NULL;
continue;
}
tree_node *p=(tree_node*)malloc(sizeof(tree_node));
p->data=elem[i];
p->left_child=NULL;
p->right_child=NULL;
node_array[i]=node; //新建一个节点
tree_node *father_node=node_array[i/2];
if(i%2==0)
father_node->left_child=p;
else
father_node->right_child=p; //将其与父节点建立关联
}
free(node_array);
return root;
}
- 由已知的层次遍历序列构建二叉树
- 二叉树的层次构建与层次遍历
- 层次遍历构建二叉树
- 由二叉树的后序和中序求层次遍历
- 已知二叉树的两种遍历序列重建树
- 二叉树面试题--已知二叉树的两种遍历序列,求出另一种遍历序列
- 二叉树面试题--已知二叉树的两种遍历序列,求出另一种遍历序列
- 已知二叉树的中序前序遍历,还原树结构+层次遍历
- 由二叉树的遍历序列恢复二叉树
- 二叉树的构建与层次遍历实现
- 二叉树:由已知两种遍历求未知遍历
- 二叉树:由已知的遍历方式求另外的遍历方式
- 由二叉树的前序遍历序列和中序遍历序列求后序遍历序列
- 数据结构,二叉树已知后续中序,建树,层次遍历;
- c++ 二叉树的构建 前序遍历 中序遍历 后续遍历 层次遍历
- 由前序遍历构建一个特殊的二叉树
- 已知二叉树的前序和中序遍历,构建该二叉树
- 已知二叉树的前序和中序遍历,构建该二叉树
- fastdfs 迁移 (v3.11 -> v5.05)
- 程序的编译和链接
- catalina.base和catalina.home的区别
- Android集成LinearLayout实现DoubleChoiceButton
- 基于Anaconda安装tensorflow
- 由已知的层次遍历序列构建二叉树
- PHP页面间参数传递的四种方法
- [Android]动态加载/热部署框架汇总
- Spring常用注解
- lightoj 1034【强连通+缩点】
- 对Native和非Native Android APP开发的一些理解
- oracle中查询的数据按汉语拼音首字母排序
- 食物也疯狂!KOOCAN盘点因为食物毁掉的中国电视剧
- 关于安卓百度地图自定义指针旋转角度问题(第一次写博客)