严蔚敏那本教材上的说法:一个深度为k,节点个数为 2^k - 1 的二叉树为满二叉树。这个概念非常好理解,就是一棵树,深度为k,而且没有空位。首先对满二叉树依照广度优先遍历(从左到右)的顺序进行编号。一颗深度为k二叉树,有n个节点,然后,也对这棵树进行编号,假设全部的编号都和满二叉树相应,那么这棵树...
分类:
其他好文 时间:
2014-08-30 20:20:51
阅读次数:
227
思想: 常量空间要求,决定了不能使用递归。满二叉树,简单循环,每次修改一层即可。
思想同上: 但是下一层最开始结点和连接过程中链表的第一个结点不易确定,所以需要设定两个变量来保存。
分类:
其他好文 时间:
2014-08-27 16:26:58
阅读次数:
197
由于题目意思是满二叉树:所以,对当前节点,设置它的左右子节点的next指针即可root->left->next = root->rightroot->right->next = root->next?root->next->left:NULL 1 /** 2 * Definition for bi....
分类:
其他好文 时间:
2014-08-22 22:24:49
阅读次数:
233
二叉树相关概念:路径:对于节点n1 n2 n3….nk从n1到nk的路径长度为k-1节点的层数:只有一个根节点,则层数为1,其余节点的层数为双亲节点的层数加1树的深度:树中所有节点的最大层数称为树的深度,只有根节点深度为1。满二叉树:所有分支节点存在左子树和右子树,并且所有的叶子节点都在同一层上。完...
分类:
其他好文 时间:
2014-08-12 21:46:04
阅读次数:
199
1、min和max为奇数,否则min和max非叶子,还可以向下拓展
2、根据满二叉树的性质,x的左右子树的个数都为2的k次方减1个节点
3、根据二叉树搜索的性质,左子树编号的区间为[min,x-1],右子树的编号区间为[x+1,max]
由此得出min=x-(2^k-1),max=x+(2^k-1)
lowbit的作用,计算x对应的二进制数中第一个1的位置k,返回权值2k。
这个函数的作用就是求出t这个数的二进制存储下,最高的非0bit所表示的大小。
即满足2^k<=t的最大的2^k,其中k为非负整数。...
分类:
其他好文 时间:
2014-08-04 21:45:28
阅读次数:
294
题目大意:
给定一颗满二叉树的后序遍历,小写字母表示叶子节点,以从下到上,从右到左的顺序输出这棵树。
解题思路:
用堆栈构建二叉树,再用bfs遍历树,用堆栈逆序输出。
注意:构树时,若节点用malloc动态分配会超时。...
分类:
其他好文 时间:
2014-08-03 18:13:15
阅读次数:
277
POJ 3367 Expressions(数据结构-二叉树)
题目大意:
给你一个满二叉树的后序遍历,小写字母表示叶子节点,将这课树按照从下到上,从右到左顺序输出。
解题思路:
先建立二叉树,用堆栈实现。
然后输出,用队列实现。...
分类:
其他好文 时间:
2014-07-30 14:49:13
阅读次数:
268
顺序存储充分利用满二叉树的特性,即每层的节点数分别为1、2、4、8。。。2i+1,一个深度为i的二叉树最多只能包含2i-1个节点,因此只要定义一个长度为2i-1的数组即可存储这颗二叉树。 对于普通的不是满二叉树的,那些空出来的节点对应的数组元素留空即可,因此顺序存储会造成一定的空间浪费。如下图。 显然,如果是完全二叉树,那么就不会有空间浪费的情况;若是只有右子树,那么会造成相当大...
分类:
编程语言 时间:
2014-07-28 16:21:57
阅读次数:
272
解: 1.14:空间是O(n)。步聚不好直接求,根据书中的描述,增长的阶是对某种规模所需资源的粗略度量,比如书中描述斐波那契的树形递归计算需要O(pow((1+sqrt(5))/2,n))步,可以把这个树形递归想像成是一个满二叉树...
分类:
其他好文 时间:
2014-07-24 10:57:06
阅读次数:
260
哈夫曼树
给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。节点的带权长度是这样定义的:节点的权值*根节点到该节点的路径长度。树的带权路径长度(Weighted Path Length of Tree,简记为WPL)则是指所有节点的带权长度和。哈夫曼树就是使WPL最小的一种树,并且哈夫曼树是满二叉树。它的构造方法是哈夫曼方法。哈夫曼树是这样构造的:...
分类:
其他好文 时间:
2014-07-12 19:49:04
阅读次数:
252