由买买提看人间百态

topics

全部话题 - 话题: trees
首页 上页 1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)
d*******l
发帖数: 338
1
来自主题: JobHunting版 - trie vs suffix tree
我觉得suffix tree可以认为是把一个字符串的所有suffix放进一个trie中,并压缩掉
度为1的节点得到的结果。
所以原则上能用其中一个地方也能用另一个,差别在复杂度上。不过现实中trie还能写
写,suffix tree的O(n)实现不太可能写出来。最多也就能嘴上说说。
n*******w
发帖数: 687
2
可能是吧。数字不记得。但是2比3简单,所以2进制,2-tree了。
c*****e
发帖数: 3226
3
2-3-4 tree, suffix tree, ....

特别是那些business applications适合那种数据类型。。要零时抱佛脚一下。/
wikipedia 有点冗长。
S****h
发帖数: 558
4
来自主题: JobHunting版 - Store a Binary Search Tree in a cluster, how?
It is from Amazon telephone interview. The traditional question:
intersection of two lists. He wanted me to think about alternative of
hashtable. So build a search tree. He then asked what happened if the
list
is so large that it has to be stored across a cluster. How would you
store
this search tree? Any good idea?
S********t
发帖数: 3431
5
没印象啊,我对150应该还是很熟悉,难道150出新版了我不知道?
make sure this problem is regarding generic tree, not BST or binary tree
g**u
发帖数: 504
6
来自主题: JobHunting版 - 问个binary search tree的问题
Imput:
array A, sum s.
Output:
pair (u,v)
Given an sorted array, choose the middle element m, then m is the root of a
balanced BST. If s-m>m, we search the right sub-tree, otherwise we search
the left sub-tree. Doing this recursively, we can find (u,v) in O(log(n)).
c***g
发帖数: 472
7
我个人对自己的corner case的考虑一向没有信心,请各位大侠调教一下
int
Tree::getDepth(Node* head) {

if(head == NULL) return 0;
if(head->left == NULL && head->right == NULL) return 0;
int left = getDepth(head->left)+1;
int right = getDepth(head->right)+1;
return (left > right)?left:right;
}
bool
Tree::isBalanced(Node* head) {
if(head == NULL ) return true;

return (isBalanced(head->left)
&& isBalanced(head->right)
&& abs(getDepth(head->left) - getDepth(head... 阅读全帖
B*******1
发帖数: 2454
8
http://www.geeksforgeeks.org/archives/5230
int height(struct node* node)
{
/* base case tree is empty */
if(node == NULL)
return 0;
/* If tree is not empty then height = 1 + max of left
height and right heights */
return 1 + max(height(node->left), height(node->right));
}
d********w
发帖数: 363
9
这里面有不少重复计算吧,我面试时也遇到,面试官希望扫描一遍tree就判断出来
int isB(Tree t){
if(!t) return 0;
int left=isB(t.left);
int right=isB(t.right);
if( left >=0 && right >=0 && left - right <= 1 || left -right >=-1)

return (left else return -1;
}
S******t
发帖数: 151
10
来自主题: JobHunting版 - suffix tree有必要搞懂吗?
。。。这都被误导成啥样了
我相信没有任何Google和Facebook的面试题会用suffix tree的
当然,你如果是说建一个包含所有suffix的trie,那当我没说
trie是需要掌握的
如果谈到suffix tree那肯定是需要用线性构造算法了
那个Ukkonen算法极其复杂,完全不可能是面试难度
甚至acm/icpc题目里面我也基本没见过
如果实在很想了解这方面的一些知识
学一学suffix array我看足够了
s******o
发帖数: 2233
11
第四版的4.8:
You are given a binary tree in which each node contains a value. Design an
algorithm to print all paths which sum up to that value. Note that it can be
any path in the tree - it does not have to start at the root.
书上的解法貌似只考虑root左边或者右边subtree里的path,比如下面这个找sum=6的就
找不出来,
2
1 3
想确认一下我的理解对不对。如果需要考虑这种情况有什么简洁点的做法?
x*******6
发帖数: 262
12
来自主题: JobHunting版 - suffix tree 和 trie
我也有过这个想法。但suffix tree node可以存一个字符串啊。好像suffix tree最好
的implementation是用Ukkonen的方法,这个我还没看
e********3
发帖数: 229
13

node
那样的话suffix tree的构造就不止O(n)了。那这要怎么跟面试官说。
假设不管这个,那我要怎么用一个api来解这题呢?我没见过有suffix tree的api。自
己想一个又怕不严谨
m*******1
发帖数: 77
14
来自主题: JobHunting版 - recover binary search tree 常数空间
Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
如果中序遍历后存起来自然是好解决,可是不满足空间要求,如何在O(1)空间做到?
e****e
发帖数: 418
15
来自主题: JobHunting版 - binary tree, sum of 2 nodes == given number
Binary tree 是暴力解法了吧.
Binary search tree is O(log(n)).
n****r
发帖数: 120
16
Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
这道题咋解呢?每个节点DFS?
C***U
发帖数: 2406
17
void MorrisTraversal(struct tNode *root)
{
struct tNode *current,*pre;
if(root == NULL)
return;
current = root;
while(current != NULL)
{
if(current->left == NULL)
{
printf(" %d ", current->data);
current = current->right;
}
else
{
/* Find the inorder predecessor of current */
pre = current->left;
while(pre->right != NULL && pre->right != current)
pre = pre->right;
/* Make current as right child of its inorder predeces... 阅读全帖
R**y
发帖数: 72
18
来自主题: JobHunting版 - Heapify a Binary tree
如何Heapify a Binary tree?
我google了一些资料,大部分的思路都是将binary tree 存储到一个数组,然后进行
heapify. 默认这个二叉树是用Node表示。
但是二叉树转换成数组的过程中,需要遍历两次这个树,第一次获得节点数目,第二次
存储节点。这就是2*O(n)了。
板上各位有没有其他的方法,直接在树本身上进行heapify?
谢谢各位
w****x
发帖数: 2483
19
那个是interval tree, 和常说的segment tree不大一样。
好像只能返回一个相交的线段
f*********m
发帖数: 726
20
来自主题: JobHunting版 - Unique Binary Search Trees的变形
我觉得没有包含。BST对于节点的顺序有限制,比如BST:1为根,2作为子节点只能在1
右侧。在这种情况下只能有1个bst.
而任意的tree没有这个限制。2可以是1的左或右子节点。所以可以有两个tree.
你的例子中,比如1 * 4 + 4 * 1,第一项是说以1为根,第二项是说以4为根。所以其
实没有包含重复。
b****g
发帖数: 192
21
Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
看了leetcode的discuss,也没给出思路。而且貌似也改变树的结构了。
b****g
发帖数: 192
22
Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
看了leetcode的discuss,也没给出思路。而且貌似也改变树的结构了。
c***s
发帖数: 192
23
用两个边界来判断的思路是对的,不过你的codes写得复杂了点。
下面是我写的:
public class ValidateBinarySearchTree {
public boolean isValidBST(TreeNode root, int min, int max) {
if(root == null) return(true);
if(root.val <= min || root.val >= max) return(false);
return(isValidBST(root.left, min, root.val) &&
isValidBST(root.right, root.val, max));
}
public boolean isValidBST(TreeNode root) {
return(isValidBST(root, Integer.MIN_VALUE, Integer.MAX_VALUE));
}
}

:
O(
tree
A******g
发帖数: 612
24
来自主题: JobHunting版 - careercup 150 4.1 balanced tree 有错?
题目:判断一个binary tree 是否平衡,平衡的定义是任意node,左边subtree和右边
subtree的高度相差不超过1。Careercup150有这道题,用了书上的解法。没有通过全部
测试。觉得careercup解法好像不对。
比如这个
{1,2,3,4,5,#,6,7}
1
/ \
2 3
/\ \
4 5 6
/
7
Careercup是用max depth - min depth = 3-1=2 不平衡
主要是上面的minDepth算法会把1右边substree算成2
请大牛指点!
careercup书上解法:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(... 阅读全帖
a******3
发帖数: 113
25
之前面试被问到。。只想到file system和xml, html是用tree结构的。剩下几个想不到
。。
b*****u
发帖数: 648
26
还有数据库索引是search tree
LRU 使用了双向链表
l********r
发帖数: 140
27
All the solutions I can find will need to use the special character to
represent the empty node. Is there a way to do it without using it?
For example:
a
b c
Will need 4 special character to represent the 4 null children nodes, which
will take too much space. Is there a way to save / load this binary tree
without using the special character?
(note: we are talking about a regular binary tree. It may not be balanced,
it is not a BST.)
l****i
发帖数: 396
28
trie 还是 suffix tree?
suffix tree是写最优的那个吗?
S******t
发帖数: 151
29
我对于这个问题的理解是最好用Aho-Corasick Algorithm而不是用Suffix Tree,Aho-
Corasick就是做多串匹配用的,实现复杂度也低很多。
http://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_string_matchi
Suffix Tree的线性构造算法是非常复杂的,我的印象里面要在300行以上(以Ukkonen算
法为例),而非线性的构造算法则毫无意义,还不如直接brute force的去匹配(比如说
CC150上的算法)。
Suffix Array的实现稍微简单一些,但是Linear Time的构造算法仍然并不好理解,我
的印象里三分法的实现复杂度应该在30-50行,而且几乎是千篇一律的模板,倍增法的
实现虽然好写一些但是复杂度就不是O(n)而是O(nlogn)的,不知道最近是不是有更好的
实现方式了,还请各位不吝指教。。。
j*****n
发帖数: 1545
30
来自主题: JobHunting版 - interval tree vs. merge intervals
Interval tree 返回的是 所有 包括那个点的 interval.
我觉得挺有用的, 很多和 interval 有关的问题都能用到 interval tree.
m****l
发帖数: 61
31
来自主题: JobHunting版 - interval tree vs. merge intervals
面试真心用不到这个。
我面了6家onsite,几次跟interviewer说可以用segment tree,发现对方完全不知道什
么是segment tree。所有题目都可以贪心或者2分。
最失败的是我没记清楚细节,当场也实现不出来。。。
g*******s
发帖数: 2963
32
来自主题: JobHunting版 - 关于面试中interval tree的问题
好像看到最近不少面经都出现了跟interval有关的。
到底什么情况下才需要当场先build一个interval tree然后再往下做?
我看了看leetcode上两道跟interval有关的(insert interval 和 merge interval)
都需要build整个tree么?
b****g
发帖数: 192
33
来自主题: JobHunting版 - suffix tree要掌握到什么程度?
给定字符串T,然后从后向前扫一遍,能建立T的suffix tree。这一步我会做。
但是从后向前扫描有缺陷,那就是必须知道字符串的结尾,所以不能用于stream相关的
场合及压缩算法。
我知道有方法可以从前向后扫描,建立suffix tree。我从没做过这种算法。面试时有
人问这种算法吗?
o******e
发帖数: 1001
34
来自主题: JobHunting版 - leetcode中tree的表示方法
刚开始做leetcode,发现测试code的时候,leetcode tree的输入方法有点不懂。比如
{1,#,2},{1,2,3,4,#,#,5}分别对应什么样点的binary tree? 多谢!
y*****i
发帖数: 141
35
字典是已知的,pattern是未知的,且多个。这样是不是KMP就不如suffix tree了。每
一个新pattern都得重新搜一次。
就是做题的时候suffix tree感觉比KMP难写多了。。。
g**G
发帖数: 767
36
如果没理解错的话,应该是trie而不是suffix tree做
trie一般用于这种类似字典的查找,suffix tree一般用来重复查找同一个字符串的子串
l*******0
发帖数: 63
37
我觉得trie不太行吧?trie是找前缀的,但他这个是要找子串。比如字典里有abcd,
mcd, ncd, 然后要找所有含cd的,那trie岂不是一个都找不出来。可是如果是suffix
tree的话 难道为每一个字典里的string都建一课suffix tree?我觉得可能用那个
rolling hash比较不错。

子串
u*****o
发帖数: 1224
38
且听本姑娘一一道来
1. pre-order recursive solution
2. pre-order iterative solution using stack
3. pre-order iteration using an iterator with stack
4. in-order recursive solution
5. in-order iterative solution using stack
6. in-order iteration using an iterator with stack
7. in-order iterative solution without stack, without parent pointer (
threaded tree)
8. in-order iterative solution without stack, with parent pointer
9. post-order recursive
10. post-order iterative using one stack
11. post-order itera... 阅读全帖
x******e
发帖数: 18
39
来自主题: JobHunting版 - 判断是不是binary search tree-leetcode
在leetcode上判断一个二叉树是不是binary search tree,用in order traversal方法
,结果{-1,0}等test case通不过。上代码:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
int last_val = INT_MIN;
class Solution {
public:
bool isValidBST(TreeNode *root) {
if (root == NULL) {
return true;
}
if (!isValidBST(root->left)) {
return false;
}
... 阅读全帖
h****p
发帖数: 87
40
Find the node with given value in binary tree in in-order way,and return it;
PS: the binary tree may include two nodes with the same value.
感觉老写不对
哪位大牛分享下solution?
谢谢
l********r
发帖数: 140
41
来自主题: JobHunting版 - (CS) heapify a binary tree
"Given the root of a binary tree (not balanced), heapify it."
It asks to heapify, it does not ask to balance the tree.
l********r
发帖数: 140
42
来自主题: JobHunting版 - (CS) heapify a binary tree
"Given the root of a binary tree (not balanced), heapify it."
It asks to heapify, it does not ask to balance the tree.
a**d
发帖数: 85
43
来自主题: JobHunting版 - tree diameter
http://www.geeksforgeeks.org/diameter-of-a-binary-tree/
看到这个题。
我觉得可以就用一个class instance variable去记录max就好了:
int max=0;
public int diameter(Tree root) {
if(root==null) return 0;
int l=diameter(root.left);
int r=diameter(root.right);
max=Math.max(max,l+r+1);
return l>r:l+1:r+1;
}
感觉这样没错吧。谢了
b****z
发帖数: 176
44
leetcode的一道题目,树的中序遍历,用普通的方法可以跑过。
但是网上看到有人用Threaded Binary Tree 。感觉这已经比较难了,像这样的问题
Threaded Binary Tree , 在准备interview的时候需要掌握吗? 会不会超过难度?
y***n
发帖数: 1594
45
就想问问大家。我的基本知识不好。都是想把Tree搞得balance,很多书都讲 Red Back
Tree,不知道为什么,我觉得挺难的。
t******i
发帖数: 483
46
http://oj.leetcode.com/problems/minimum-depth-of-binary-tree/
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int minDepth(TreeNode root) {
getMinDepth(root, 0);
return min;
}
public static int min = Integer.MAX_VALUE;
public void getMinDepth(TreeNode node, int level) {
if (node == null) {
if (min > level... 阅读全帖
m**********j
发帖数: 610
47
来自主题: JobHunting版 - Tree的traversal也分BFS和DFS?

tree就是graph的一种,无向无环图
所以graph的BFS跟DFS拿到tree上直接跑
k***g
发帖数: 166
48
来自主题: JobHunting版 - 需要学suffix tree的构造方法吗?
感觉许多字符串问题都可以用suffix tree解,但面试的时候会实际写怎么构造一棵
suffix tree吗?大家遇到过吗?
R*****i
发帖数: 2126
49
来自主题: JobHunting版 - 请教个面试题, tree和hashmap的区别
感觉比较tree和hashmap就是比较牛头和马嘴,除了都是collection以外,没有任何相
似之处。tree是一种hierarchy,寻找的cost是O(log(n)),并且可以让您快速找到大小顺
序中的左邻右舍,hashmap是hashtable?, 根据key找value,寻找的cost是O(1).
f*******w
发帖数: 1243
50
来自主题: JobHunting版 - 请教个面试题, tree和hashmap的区别
个人感觉两点:一是复杂度,O(1)和O(logn)的区别; 二是tree结构通常是说BST,所以
整体是排好序的,而hashmap不是。所以当你需要in order输出,或者找到前一个/后一
个element的时候用tree比hash好。
反正我面试的时候碰到这题回答这两点一般就move on了……
首页 上页 1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)