由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 求救: 打印binary tree
相关主题
如何实现binary tree的从下到上的分层打印?这个用stack实现queue
用queue 做树的广度优先遍历,空间复杂度是多少?如何用JAVA中的circular array of queue 解决Josephus problem? (转载)
问个OO题 (转载)问个题:get max value from Queue, with O(1)?
A家来两道电面题贡献一道G家电面题
CLRS算法书中BFS的疑问面试题
昨天被面试的问题一道很难的面试题
请教一个系统设计问题 (转载)A第一轮电面,求建议,面完必update
share 面试题Two programming questions...
相关话题的讨论汇总
话题: enqueue话题: node话题: queue话题: root话题: nil
进入JobHunting版参与讨论
1 (共1页)
b********e
发帖数: 693
1
要求每个level一行
thanks
p******r
发帖数: 2999
2
用stack/list记录node

【在 b********e 的大作中提到】
: 要求每个level一行
: thanks

a*********9
发帖数: 523
3
用QUEUE入队

【在 b********e 的大作中提到】
: 要求每个level一行
: thanks

f*****o
发帖数: 2
4
可以中序遍历,每一层一个queue, 然后打印
空间比时间重要的话,可以中序搜索,每次搜多一层,每次打印一层
g**e
发帖数: 6127
5
从root开始,把所有子节点enqueue以后,再加一个分隔符enqueue
以后每遇到一个分隔符,就再加一个分隔符enqueue,直到queue为空就完了

【在 f*****o 的大作中提到】
: 可以中序遍历,每一层一个queue, 然后打印
: 空间比时间重要的话,可以中序搜索,每次搜多一层,每次打印一层

f*****o
发帖数: 2
6
嗯,貌似简单的广度优先搜索就行。

【在 g**e 的大作中提到】
: 从root开始,把所有子节点enqueue以后,再加一个分隔符enqueue
: 以后每遇到一个分隔符,就再加一个分隔符enqueue,直到queue为空就完了

b********e
发帖数: 693
7
queue里面怎么加分隔符?

【在 g**e 的大作中提到】
: 从root开始,把所有子节点enqueue以后,再加一个分隔符enqueue
: 以后每遇到一个分隔符,就再加一个分隔符enqueue,直到queue为空就完了

i***1
发帖数: 95
8
if we wants to print beautiful pics (which adds spaces to align nodes), then
I guess we need to do certain preprocessing. We have to know the depth even
it is a complete binary tree.
if we only wants to seperate them to different lines, then using BFS.
one way to avoid using "分隔符", is to use two arrays instead. (swap back
forth)
f*********5
发帖数: 576
9
queue.push_back(NULL);

【在 b********e 的大作中提到】
: queue里面怎么加分隔符?
j**l
发帖数: 2911
10
你不判断分隔符是否在队尾是不行的,否则会死循环,一路追加分隔符到队尾。

【在 g**e 的大作中提到】
: 从root开始,把所有子节点enqueue以后,再加一个分隔符enqueue
: 以后每遇到一个分隔符,就再加一个分隔符enqueue,直到queue为空就完了

相关主题
昨天被面试的问题这个用stack实现queue
请教一个系统设计问题 (转载)如何用JAVA中的circular array of queue 解决Josephus problem? (转载)
share 面试题问个题:get max value from Queue, with O(1)?
进入JobHunting版参与讨论
i*****e
发帖数: 113
11
enqueue root
enqueue '\n'
while queue is not empty
if current node is '\n'
enqueue '\n'
else
enqueue all children of current node
example:
a
b1 b2
c1 c2 nil c3
nil nil nil d1
nil
a \n
a \n b1 b2 \n
a \n b1 b2 \n c1 c 2 c3 \n
a \n b1 b2 \n c1 c 2 c3 \n d1 \n
j**l
发帖数: 2911
12
你不判断分隔符是否在队尾是不行的,否则会死循环,一路追加分隔符到队尾。

【在 i*****e 的大作中提到】
: enqueue root
: enqueue '\n'
: while queue is not empty
: if current node is '\n'
: enqueue '\n'
: else
: enqueue all children of current node
: example:
: a
: b1 b2

i*****e
发帖数: 113
13
对,多谢提醒
应该在循环的时候加上计数,如果上一次没有child enqueue,则退出

【在 j**l 的大作中提到】
: 你不判断分隔符是否在队尾是不行的,否则会死循环,一路追加分隔符到队尾。
w******a
发帖数: 236
14
void printBinaryTree (Node * root) {
Node * myqueue[MAX_NODE_NUM] = { 0...MAX_NODE_NUM-1 = (Node *)0 };
int queue_pointer = 0;
int queue_size = 0;
while (root != 0) {
print ("%d\n", root->value);
if (root->lc != 0) {
myqueue[queue_size++] = root->lc;
}
if (root->rc != 0) {
myqueue[queue_size++] = root->rc;
}
root = myqueue[queue_pointer++];
}
}
j**l
发帖数: 2911
15
这样就可以了:
enqueue root
enqueue '\n'
while queue is not empty
{
dequeue and set current node with the returned value
print current node
if current node is '\n' and queue is not empty
enqueue '\n'
else
enqueue all children of current node
}

【在 i*****e 的大作中提到】
: 对,多谢提醒
: 应该在循环的时候加上计数,如果上一次没有child enqueue,则退出

w******a
发帖数: 236
16
sorry,刚才没注意是要每一个level在一行输出,代码需要改改。

【在 w******a 的大作中提到】
: void printBinaryTree (Node * root) {
: Node * myqueue[MAX_NODE_NUM] = { 0...MAX_NODE_NUM-1 = (Node *)0 };
: int queue_pointer = 0;
: int queue_size = 0;
: while (root != 0) {
: print ("%d\n", root->value);
: if (root->lc != 0) {
: myqueue[queue_size++] = root->lc;
: }
: if (root->rc != 0) {

1 (共1页)
进入JobHunting版参与讨论
相关主题
Two programming questions...CLRS算法书中BFS的疑问
A家电面昨天被面试的问题
thread-safe blockingqueue请教一个系统设计问题 (转载)
thread safe blocking queue问题share 面试题
如何实现binary tree的从下到上的分层打印?这个用stack实现queue
用queue 做树的广度优先遍历,空间复杂度是多少?如何用JAVA中的circular array of queue 解决Josephus problem? (转载)
问个OO题 (转载)问个题:get max value from Queue, with O(1)?
A家来两道电面题贡献一道G家电面题
相关话题的讨论汇总
话题: enqueue话题: node话题: queue话题: root话题: nil