树
文章平均质量分 76
yingsun
坚持下去~
展开
-
三元查找树-插入和查找的速度快于hash表
原文看着还是挺简单的,所以就没做翻译,同时水平有限,可能翻译过来时候一些细节的内容就会丢失,还有,原网站是国外的,需要注册,而且很麻烦,源码下载不下来,故原文中的一些函数不知道实现的细节,此当给大家拓展写思路吧,最后附上我自己实现的代码。还有,不要嫌文章太长,可以花一段时间去阅读,你会感受到老外思维的缜密,我们应该学习人家什么地方。When you have to store a set of原创 2012-10-28 10:51:02 · 5024 阅读 · 0 评论 -
double-array trie c代码 - a efficient implementation of trie structures
这些代码已经stress test, 但是因为set_list 函数还有待改进,所以代码中insert_word还会占用很长的时间。会进一步改进。算法来源于a efficient implementation of trie structures. 作者貌似是个日本人。先贴上代码,以便供喜欢double array trie的人研究,看了libdatrie的源码,比这个复杂,但是 原理是一样的。近原创 2013-01-03 19:30:02 · 2897 阅读 · 1 评论 -
红黑树-详细剖析-如果你有一天或者两天的时间,借助此文,能够学会红黑树的。
看了算法导论,也看了wikipedia,纠结了好几天,终于能看懂红黑树了。于是就写下这边博客,以供自己以后参考,或者能够和大家交流,希望能够共同学习。红黑树是很复杂的一种树。它的典型用途就是关联数组。至于红黑树的删除,必定会给出耳目一新的思路。一,红黑树的插入按照常理,给出红黑树的性质:1,每个节点或者是红色的或者是黑色的。2,根节点是黑色的。3,每个NIL节点都是黑色的。原创 2012-11-29 21:11:14 · 1735 阅读 · 0 评论 -
double-array trie 译文+心得
自己对树是情有独钟,故在元旦放假的时候,翻译了an efficient implementation of trie structures。作者及来源就不叙述了。英文水平有限,但是尽量还原此文章的灵魂。如果有什么不对的地方,敬请各位给予指点。(http://blog.csdn.net/zzran/article/details/8461985-源码).学习的时候要有trie的基础。概论原创 2013-01-03 21:24:47 · 11526 阅读 · 8 评论 -
分别计算二叉树奇数层和偶数层的和-- 一道amazon面试题
You are given a function calcDifference which takes in the root pointer of a binary tree as it's input. Complete the function to return the sum of values of nodes at odd height - sum of values of node原创 2013-01-15 18:05:01 · 2752 阅读 · 0 评论 -
层次遍历二叉树-三种不同的方法
给定一棵二叉树,要求进行分层遍历,每层的节点值单独打印一行,下图给出事例结构:对此二叉树遍历的结果应该是:1,2 , 34, 5, 67, 8第一种方法,就是利用递归的方法,按层进行打印,我们把根节点当做第0层,之后层次依次增加,如果我们想打印第二层怎么办呢,利用递归的代码如下:int print_at_level(Tree T, int level) {原创 2013-04-09 16:26:16 · 70281 阅读 · 6 评论 -
把二叉树转换成双向链表
记得这是一道微软的面试题,想了很长时间不知道怎么做,近期看别人的博客,找到了算法,自己实现了一下,下面是算法的叙述:1. If left subtree exists, process the left subtree…..1.a) Recursively convert the left subtree to DLL.…..1.b) Then find inorder predece原创 2013-05-08 11:26:33 · 1209 阅读 · 0 评论 -
怎么判断一棵树的所有叶子节点都在同一层
给定一棵树,怎么判断它的所有叶子节点都在同一层,这种情况应该是完全二叉树的一种特例,如下图:如果去掉节点6的话,它是一棵完全二叉树,但是所有的叶子节点不在同一层,下面是层次遍历的一种方法:#include#includeusing namespace std;typedef struct tree_node_s { int value; struct t原创 2013-06-06 12:00:33 · 5863 阅读 · 1 评论 -
zig tag traversal a binary tree
#include#includeusing namespace std;typedef struct tree_node_s { int value; struct tree_node_s* lchild; struct tree_node_s* rchild;}tree_node_t;tree_node_t* createNode(int value) { tree_nod原创 2013-06-08 10:49:44 · 2404 阅读 · 1 评论 -
找出文本中存在的坏单词-后缀trie
假设给定一个关键词rob,如果某一个单词中包含此字符串,那么就断定此字符串为bad word。如problem就包含rob,那么它就是bad word。其实这种叙述是:“判断一个字符串是否是另一个字符串的子串”的另外一种描述。熟悉字符串匹配的人都知道,这个问题可以用KMP算法很快就能够解决。但是就像我们不嫌弃自己的钱多的一样,方法多了,路子就多了。所以决定应用后缀trie来解决这个问题。后缀tri原创 2012-12-30 20:02:15 · 1722 阅读 · 0 评论 -
二叉树的基础问题
先给定一个二叉树的图作为样例:图中下边没有给出的表示为空,图画的不好,将就着看吧。下面的代码中分别给出了二叉树的前中后的递归遍历和非递归遍历,最后还给出层次遍历。#include#include#includeusing namespace std;#define NIL '#'typedef struct tree_node{ char data; struct原创 2012-11-24 20:12:35 · 932 阅读 · 0 评论 -
一个数组里,数都是两两出现的,但是有三个数是唯一出现的,找出这三个数。
这个题我用的是trie索引树,不知道对不对,但是我写完程序运行后结果是对的,先贴上程序,一起探讨:#include#include#include#define branch_num 10typedef struct trie_node{ int count; struct trie_node *child[branch_num];}TrieNode,*TrieTre原创 2012-09-22 10:32:53 · 1728 阅读 · 0 评论 -
给定先序:ABCDEFGHIJK 给定中序:CBEDGFAHJIK 首先分析上述给定的先,中序,首先得知先序遍历的肯定是二叉树的根节点:A,在看中序遍历,根据中序遍历的原理可知,在A左边的一定全部属于
给定先序:ABCDEFGHIJK给定中序:CBEDGFAHJIK首先分析上述给定的先,中序,首先得知先序遍历的肯定是二叉树的根节点:A,在看中序遍历,根据中序遍历的原理可知,在A左边的一定全部属于A的左子树,在其右边的肯定属于其右子树。再看序列,先序:BCDEFG,中序:CBEDGF,可以把这两个序列作为遍历一个树的结果,那么同理可知B肯定是此树的根节点,二C属于此树的左子树部分,原创 2012-09-19 21:23:01 · 2204 阅读 · 0 评论 -
trie树的应用:查找hatword
Hat’s WordsProblem DescriptionA hat’s word is a word in the dictionary that is the concatenation of exactly two other words in the dictionary.You are to find all the hat’s words in a dictionary.原创 2012-12-03 21:03:44 · 1413 阅读 · 0 评论 -
输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22和如下二元树 10 / \原创 2012-11-19 22:24:07 · 6769 阅读 · 1 评论 -
输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点
输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。例如给定下列的输入:然后有如下的输出:可以看到,所谓树的镜像,就是把同一层中属于同一个父节点的两个子节点进行对调。图中没有给出一个父节点之后一个子节点的情况,但是可以把问题统一于一个父节点同时存在两个左右子节点的情况,这两个子节点可以同时存在,但是其中一个也可以是空,可以原创 2012-11-23 20:52:16 · 2062 阅读 · 0 评论 -
胜者树与败者树
胜者树和败者树都是完全二叉树,是树形选择排序的一种变型。每个叶子结点相当于一个选手,每个中间结点相当于一场比赛,每一层相当于一轮比赛。不同的是,胜者树的中间结点记录的是胜者的标号;而败者树的中间结点记录的败者的标号。胜者树与败者树可以在log(n)的时间内找到最值。任何一个叶子结点的值改变后,利用中间结点的信息,还是能够快速地找到最值。在k路归并排序中经常用到。原创 2012-12-08 21:50:58 · 3311 阅读 · 1 评论 -
不用递归和辅助空间对二叉树进行遍历
递归和非递归的进行二叉树的遍历从某种意义上来讲都是需要辅助空间的。那么进行非递归的和不需要辅助空间的遍历会有这种可能吗?答案是肯定的,应用线索二叉树,这样就能把左子树或者右子树为空的节点利用起来,二叉树线索之后就可能找到某个节点的前区或者后继。一个含有n个节点的二叉树,可定会有n+1个指针是空的。所有利用这n+1一个指针就能将二叉树线索化而不遗漏任何一个节点。下面给出利用这种线索化来遍历二叉树原创 2013-06-18 14:08:58 · 3276 阅读 · 0 评论