如何逐层建立一棵满二叉树?
来源:互联网 发布:淘宝追加评论怎么找 编辑:程序博客网 时间:2024/06/18 16:52
《洋葱》: 如果你愿意一层一层的剥开我的心
会发现 会流泪 我就是你失散多年的二叉树啊~
几个要点:
1.来自: lm_whales
struct XXX *p = //结构体指针类型
(struct XXX *) //强制转换成结构体指针类型
malloc(
sizeof(struct XXX) //结构体的大小
);
2.来自:2015年数据结构联考复习指导
n个结点的满二叉树,约定编号从根结点起(根结点编号为1),自上而下,自左向右,每个结点对应一个编号,对于编号为i的结点,如果有双亲,则其双亲结点为┕ i/2 ┙(下取整),如果有左孩子,则左孩子为2i,如果有右孩子,则右孩子为2i+1。
3.
所谓的逐层建立满二叉树,就是定义一个有左、右孩子指针和数据域的结点,然后把该结点填充进一个数组里,每次迭代修改结点的左右孩子指针,所按照的规则就是前面所说的结点编号的规则。为实现迭代修改,需要两个计数器i和j,i用来记录结点编号,j则是在每次修改右孩子指针的时候+1。比如:i=3的结点处j=3mod2=1, 即下一层的父结点。
下面是具体实现的代码
structlib.h
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include<string.h>//自定义类型 typedef char ElemType;//定义线索二叉树结构typedef struct THREAD{ ElemType data; //数据域 struct THREAD *lchild, *rchild; //左右孩子指针 }Thread, *ThreadPoint;
main.c
#include "structlib.h"int len;int i=0,j=0; //次数ThreadPoint tp[1024];//操作结果:层次遍历构造二叉树 int createBinaryTree(ElemType *branch){ ThreadPoint curr; curr = (ThreadPoint)malloc(sizeof(Thread)); curr->data = *branch; //结点的值 curr->lchild = NULL; //左子树置空 curr->rchild = NULL; //右子树置空 tp[i] = curr; //添加结点 if (i == 0){ ++i; createBinaryTree(branch + 1); } if (i % 2 == 0 && i != 0){ ++j; //每次到右子树时,j+1,则tp[j]就能实现同一层结点的遍历 tp[j]->rchild = curr; //右子树 } else if (i % 2 == 1){ tp[j]->lchild = curr; //左子树 } if (i == (len - 1)){ return 1; //当i到达输入的末尾时,停止工作 } i++; //为了上面的模运算 我也是拼了 createBinaryTree(branch + 1); //递归呗}//访问当前结点void visit(ThreadPoint tp){ printf("%c",tp->data);}void main(){ ElemType * branch; branch = (ElemType *)malloc(sizeof(ElemType)); //这行决定了你的指针是不是野指针 printf("请输入你要建立的二叉树序列【如:AEBCD】:"); scanf("%s",branch); //一次性输入 len = strlen(branch); //计算下长度 createBinaryTree(branch); //构造开始 printf("大爷,你要的二叉树做好了:"); for (int i = 0; i < len; i++){ visit(tp[i]); } printf("\n");}
Done!
0 0
- 如何逐层建立一棵满二叉树?
- 如何建立二叉树
- 建立二叉树,实现二叉树的层序遍历
- 如何从顶层开始逐层打印二叉树
- 二叉树(按层建立二叉树,前中后序以及按层遍历)
- 已知中后序遍历-->建立二叉树-->层序输出
- 如何根据两个遍历建立二叉树
- 二叉树 逐层遍历
- 给定数组,如何快速建立查找二叉树
- 如何按层遍历输出二叉树元素
- 建立二叉搜索树,求中序遍历,层序(从头到尾)遍历,镜像
- 括号法递归建立二叉树并层序遍历输出
- UVa 122 Trees on the level 建立二叉树BFS层序遍历
- 20170514_建立二叉树+前序遍历+层序遍历+栈+队列
- 根据前序/后序/层序+中序遍历序列建立二叉树
- C++ 完全二叉树的建立、先序递归非递归遍历、层序遍历
- 二叉树的建立,前中后序遍历的递归版本和非递归版本,层序遍历
- 数据结构——二叉树的建立和遍历(递归建树&层序遍历建树)
- 全局变量只能初始化不能赋值
- PHP ssh2实现远程执行操作
- lua setmetatable __index __newindex
- 【NOIP2016提高A组模拟9.9】运输妹子
- SCU2016-02 I题 (反转技巧)
- 如何逐层建立一棵满二叉树?
- Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)
- Logstash的一次问题排查
- 渲染世界的OpenGL<8> 基础纹理
- 【NOIP2012模拟10.26】雕塑
- 鼠标滚轮事件
- struts2.5错误-There is no Action mapped for namespace [/] and action
- AIDL示例编程
- mysql-5.7.15-winx64配置