由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 一道面试题
相关主题
A家,link all node in the same lev请教一道面试题
G题,把binary tree里面的sibling节点连接起来c语言实现TreeFee
一道面试题:Flatten a multilevel linked list求教一道面试题
这个check whether a binary tree is a BST 问题狗电面
一个老题binary tree找 lowest common ancestor 的code (请教T第二轮面经
讨论Amazon的一道题:根节点到叶节点之间最小和,并打印路径感觉Binary Tree Postorder Traversal的iterative是三种traversal中最难的
生成树Google second phone interview
BST面试题Print a binary tree in level order but starting from leaf node up to root
相关话题的讨论汇总
话题: node话题: nextright话题: null话题: rightchild话题: parent
进入JobHunting版参与讨论
1 (共1页)
c*****y
发帖数: 90
1
Given a binary tree
struct node{
struct node* leftChild;
struct node* rightChild;
struct node* nextRight;
}
The nextRight points to the right node to the current node in the same
level. Ask you populate the nextRight pointers in each node.
大家怎么做这道题.
m*****f
发帖数: 1243
2
记得以前有个分level打印二叉树的题目么, 这两道题本质上是一样的
a*******g
发帖数: 12
3
BFS

【在 c*****y 的大作中提到】
: Given a binary tree
: struct node{
: struct node* leftChild;
: struct node* rightChild;
: struct node* nextRight;
: }
: The nextRight points to the right node to the current node in the same
: level. Ask you populate the nextRight pointers in each node.
: 大家怎么做这道题.

c*****y
发帖数: 90
4
对,就是每个node从queue里面dequeue出来后它的nextRight指向queue的peek。
我现在在想,能否有recursion的方法?想了下想不出来。

【在 m*****f 的大作中提到】
: 记得以前有个分level打印二叉树的题目么, 这两道题本质上是一样的
b****j
发帖数: 78
5
可以使用任何方式遍历一遍这棵树,iterative or recurise
在遍历过程中,对每一个节点x
if (x->leftChild and x->rightChild) {
x->leftChild->nextRight = x->rightChild;
x->rightChild->nextRight = 0;
}

【在 c*****y 的大作中提到】
: Given a binary tree
: struct node{
: struct node* leftChild;
: struct node* rightChild;
: struct node* nextRight;
: }
: The nextRight points to the right node to the current node in the same
: level. Ask you populate the nextRight pointers in each node.
: 大家怎么做这道题.

c*****y
发帖数: 90
6
这个主要看如何理解这道题,如果认为nextRight是指向同一parent点下的右边点,你
可以这么做。
如果是指同一level的右边点,那么只能用bfs了。

【在 b****j 的大作中提到】
: 可以使用任何方式遍历一遍这棵树,iterative or recurise
: 在遍历过程中,对每一个节点x
: if (x->leftChild and x->rightChild) {
: x->leftChild->nextRight = x->rightChild;
: x->rightChild->nextRight = 0;
: }

b****j
发帖数: 78
7
I see, then BFS!

【在 c*****y 的大作中提到】
: 这个主要看如何理解这道题,如果认为nextRight是指向同一parent点下的右边点,你
: 可以这么做。
: 如果是指同一level的右边点,那么只能用bfs了。

b***e
发帖数: 1419
8
这题水深了. 你的研究客户心理. 明显不是BFS. 对于平衡树来讲, BFS的space
complexity
是O(n)的. DFS一般是O(log(n))的. 一般树都比较平衡, 否则比较傻逼. 这个分三步:
第一步, 如果有parent pointer, 就就这么做:
void linkNext(node * current) {
if (!current) {
return;
}
if (current->nextRight) {
return;
}
node * parent = current->parent;
if (!parent) {
current->nextRight = NULL;
} else if (current == parent->leftChild && parent->rightChild) {
current->nextRight = parent->rightChild;
} else {
node

【在 c*****y 的大作中提到】
: 对,就是每个node从queue里面dequeue出来后它的nextRight指向queue的peek。
: 我现在在想,能否有recursion的方法?想了下想不出来。

v*****t
发帖数: 127
9
其实从上往下,遍历一层链的过程中链接下一层链,这样就不需要parent指针了。因为
在生成下一层链的时候,当前的这个节点就是下一层的parent。

步:

【在 b***e 的大作中提到】
: 这题水深了. 你的研究客户心理. 明显不是BFS. 对于平衡树来讲, BFS的space
: complexity
: 是O(n)的. DFS一般是O(log(n))的. 一般树都比较平衡, 否则比较傻逼. 这个分三步:
: 第一步, 如果有parent pointer, 就就这么做:
: void linkNext(node * current) {
: if (!current) {
: return;
: }
: if (current->nextRight) {
: return;

b***e
发帖数: 1419
10
没说到点上。
其实这题的意思是用nextRight来代替queue, 不要新空间。 就像用parent来代替栈一
样。

【在 v*****t 的大作中提到】
: 其实从上往下,遍历一层链的过程中链接下一层链,这样就不需要parent指针了。因为
: 在生成下一层链的时候,当前的这个节点就是下一层的parent。
:
: 步:

相关主题
讨论Amazon的一道题:根节点到叶节点之间最小和,并打印路径请教一道面试题
生成树c语言实现TreeFee
BST面试题求教一道面试题
进入JobHunting版参与讨论
g*******y
发帖数: 1930
11
在一层上遍历完了一条链(由nextRight串起来的链)生成下一层新的一条链,然后再遍历新的链继续生成新的链。。。这不就相当于是用nextRight代替queue嘛
当然,没有你表述的那么清晰,呵呵
有了queue就不需要stack了,所以不需要用到parent了嘛

【在 b***e 的大作中提到】
: 没说到点上。
: 其实这题的意思是用nextRight来代替queue, 不要新空间。 就像用parent来代替栈一
: 样。

m*****f
发帖数: 1243
12
一针见血啊, 明白了

【在 b***e 的大作中提到】
: 没说到点上。
: 其实这题的意思是用nextRight来代替queue, 不要新空间。 就像用parent来代替栈一
: 样。

b***e
发帖数: 1419
13
其实这个题我真的遇到过。说起来都容易,现场写code不好写。尤其是白板上。

【在 m*****f 的大作中提到】
: 一针见血啊, 明白了
k***e
发帖数: 556
14
大牛怎么最近开始用中文了
有没有机会refer我一下 :)

【在 b***e 的大作中提到】
: 其实这个题我真的遇到过。说起来都容易,现场写code不好写。尤其是白板上。
b****j
发帖数: 78
15
好主意, 原题没有说清楚需要空间O(1),时间O(n),把这个算法实现了一下,没有运行
过:
void check(Node *p, Node* &last, Node* &first) {
if (p) {
if (last)
last->nextRight = p;
else
first = p;
last = p;
}
}
void link_next_right(Node *root) {
if (root)
root->nextRight = NULL;
for (Node *first=root, *next_first=NULL;
first;
first=next_first, next_first=NULL) {
Node *last = NULL;
for (Node *p=first; p; p=p->nextRight) {
check(p->leftChild, last, next_first);
check(p->ri

【在 g*******y 的大作中提到】
: 在一层上遍历完了一条链(由nextRight串起来的链)生成下一层新的一条链,然后再遍历新的链继续生成新的链。。。这不就相当于是用nextRight代替queue嘛
: 当然,没有你表述的那么清晰,呵呵
: 有了queue就不需要stack了,所以不需要用到parent了嘛

h*********e
发帖数: 56
16
should the rightmost one in a level point to NULL, or to the leftmost one in
the next level?
b****j
发帖数: 78
17
NULL, if it were the leftmost one in the next level, the code could be furth
er simplified.

in

【在 h*********e 的大作中提到】
: should the rightmost one in a level point to NULL, or to the leftmost one in
: the next level?

1 (共1页)
进入JobHunting版参与讨论
相关主题
Print a binary tree in level order but starting from leaf node up to root一个老题binary tree找 lowest common ancestor 的code (请教
刚才的amazon phone interview 第一轮讨论Amazon的一道题:根节点到叶节点之间最小和,并打印路径
这个check whether a binary tree is a BST or not生成树
bst中序遍历c++ class iteratorBST面试题
A家,link all node in the same lev请教一道面试题
G题,把binary tree里面的sibling节点连接起来c语言实现TreeFee
一道面试题:Flatten a multilevel linked list求教一道面试题
这个check whether a binary tree is a BST 问题狗电面
相关话题的讨论汇总
话题: node话题: nextright话题: null话题: rightchild话题: parent