由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 二叉树按层次打印有没有办法换行显示?
相关主题
请教一道g算法题如何随机找二叉树中的任意节点?
Google second phone interview回馈本版,新鲜店面,新题新气象
delete a node in linked list热腾腾的 LinkedIn 电面题攒RP
请教一个二叉树镜像问题一道google面试题
微软面试的一道题一道二叉树的老题
Twitter电面未通过算法题:合并两个排序二叉树
问个二叉树删除结点的问题求二叉树最大路径和的变体题
求教一道面试题求问把二叉树的recursive遍历改为stack实现的思路
相关话题的讨论汇总
话题: null话题: node话题: queue话题: temp话题: right
进入JobHunting版参与讨论
1 (共1页)
r****o
发帖数: 1950
1
用书上通用的用queue的方法实现二叉树按层次打印,结果全打印到一行了。
不知道有没有什么好办法可以插入换行符,让每层数据在不同的行显示?
B*****t
发帖数: 335
2
add a flag when you push the right most node into the queue.

【在 r****o 的大作中提到】
: 用书上通用的用queue的方法实现二叉树按层次打印,结果全打印到一行了。
: 不知道有没有什么好办法可以插入换行符,让每层数据在不同的行显示?

r****o
发帖数: 1950
3
Thanks. But how to judge the right most node of each level?

【在 B*****t 的大作中提到】
: add a flag when you push the right most node into the queue.
B******5
发帖数: 4676
4
node上不能再加上一个层数的变量?
r****o
发帖数: 1950
5
可以吧,这不是面试题,我自己想的。呵呵。

【在 B******5 的大作中提到】
: node上不能再加上一个层数的变量?
z*******y
发帖数: 578
6
昨天facebook phone screen的时候就让我写的这道coding
你可以把每层放进queue以后,再 queue.push 一个NULL来表示一层结束了
每次从queue里出来的元素,如果是NULL就换行,不是就接着打印
这里关键的一点是每次NULL从queue里边pop出来后,要push一个新的NULL到队列结尾
你先看看,还不明白的话我就把代码贴上来
r****o
发帖数: 1950
7

明白了,就是在这里实现了在每行末尾加个NULL,对把。

【在 z*******y 的大作中提到】
: 昨天facebook phone screen的时候就让我写的这道coding
: 你可以把每层放进queue以后,再 queue.push 一个NULL来表示一层结束了
: 每次从queue里出来的元素,如果是NULL就换行,不是就接着打印
: 这里关键的一点是每次NULL从queue里边pop出来后,要push一个新的NULL到队列结尾
: 你先看看,还不明白的话我就把代码贴上来

B*****t
发帖数: 335
8
???
starting from the root, if it is right most node, push it with a flag(of
course root is right most node).
once you pop a right most node, and this node has right child, push that
child with a flag too.

【在 r****o 的大作中提到】
: Thanks. But how to judge the right most node of each level?
r****o
发帖数: 1950
9
the rightmost node in one level can also be the left child of a node in the
above level.

【在 B*****t 的大作中提到】
: ???
: starting from the root, if it is right most node, push it with a flag(of
: course root is right most node).
: once you pop a right most node, and this node has right child, push that
: child with a flag too.

B*****t
发帖数: 335
10
hehe, it's a trick, if right most node don't have right child, you can
create a dummy child, when output, remember don't output the content of the
dummy node.

the

【在 r****o 的大作中提到】
: the rightmost node in one level can also be the left child of a node in the
: above level.

相关主题
Twitter电面未通过如何随机找二叉树中的任意节点?
问个二叉树删除结点的问题回馈本版,新鲜店面,新题新气象
求教一道面试题热腾腾的 LinkedIn 电面题攒RP
进入JobHunting版参与讨论
B*****t
发帖数: 335
11
请问你facebook在哪儿投的简历? thanks

【在 z*******y 的大作中提到】
: 昨天facebook phone screen的时候就让我写的这道coding
: 你可以把每层放进queue以后,再 queue.push 一个NULL来表示一层结束了
: 每次从queue里出来的元素,如果是NULL就换行,不是就接着打印
: 这里关键的一点是每次NULL从queue里边pop出来后,要push一个新的NULL到队列结尾
: 你先看看,还不明白的话我就把代码贴上来

r****o
发帖数: 1950
12
谢谢,我还有一个小地方没明白。
如果每次NULL从queue里面pop出来,再push一个新的NULL进队列,那么程序如何知道什
么时候结束呢?要不然最后就会陷入push pop NULL的死循环。
也许这个问题很简单,请指教。

【在 z*******y 的大作中提到】
: 昨天facebook phone screen的时候就让我写的这道coding
: 你可以把每层放进queue以后,再 queue.push 一个NULL来表示一层结束了
: 每次从queue里出来的元素,如果是NULL就换行,不是就接着打印
: 这里关键的一点是每次NULL从queue里边pop出来后,要push一个新的NULL到队列结尾
: 你先看看,还不明白的话我就把代码贴上来

z*******y
发帖数: 578
13
queue的初始化是把root放进去,然后再放进去一个NULL
然后循环条件是 while(!queue.empty())
检查queue是否空了就可以

【在 r****o 的大作中提到】
: 谢谢,我还有一个小地方没明白。
: 如果每次NULL从queue里面pop出来,再push一个新的NULL进队列,那么程序如何知道什
: 么时候结束呢?要不然最后就会陷入push pop NULL的死循环。
: 也许这个问题很简单,请指教。

r****o
发帖数: 1950
14
但是不是至少有一个NULL在queue里面吗?因为每个NULL pop之后又会push 一个新的
NULL。

【在 z*******y 的大作中提到】
: queue的初始化是把root放进去,然后再放进去一个NULL
: 然后循环条件是 while(!queue.empty())
: 检查queue是否空了就可以

m****u
发帖数: 3915
15
用两个queue
一个queue打印时,总是把孩子加入到另一个queue
queue空了就打印换行,然后换另一个queue打印

【在 r****o 的大作中提到】
: 用书上通用的用queue的方法实现二叉树按层次打印,结果全打印到一行了。
: 不知道有没有什么好办法可以插入换行符,让每层数据在不同的行显示?

r****o
发帖数: 1950
16
这个方法好,多谢。

【在 m****u 的大作中提到】
: 用两个queue
: 一个queue打印时,总是把孩子加入到另一个queue
: queue空了就打印换行,然后换另一个queue打印

r****o
发帖数: 1950
17
发现可以判断 queue.size()==1 && queue.front==NULL 时程序结束。

【在 z*******y 的大作中提到】
: queue的初始化是把root放进去,然后再放进去一个NULL
: 然后循环条件是 while(!queue.empty())
: 检查queue是否空了就可以

d********e
发帖数: 132
18

请把代码贴上来吧,yahoo电面也问过我这道题。

【在 z*******y 的大作中提到】
: 昨天facebook phone screen的时候就让我写的这道coding
: 你可以把每层放进queue以后,再 queue.push 一个NULL来表示一层结束了
: 每次从queue里出来的元素,如果是NULL就换行,不是就接着打印
: 这里关键的一点是每次NULL从queue里边pop出来后,要push一个新的NULL到队列结尾
: 你先看看,还不明白的话我就把代码贴上来

z*******y
发帖数: 578
19
Void LevelTraversal(Node *root)
{
if(root == NULL) return;
queue q = new queue;
q.push(root);
q.push(NULL);
while(!q.empty() && q.size()!=1)
{
Node *temp = q.pop();
if(temp == NULL)
{
cout << endl;
q.push(NULL);
}
else
{
cout << temp->data << " ";
if(temp->left!=NULL)
q.push(temp->left);
if (temp->right!=NULL)
q.push(tem
1 (共1页)
进入JobHunting版参与讨论
相关主题
求问把二叉树的recursive遍历改为stack实现的思路微软面试的一道题
我恨iPhone@Facebook电面Twitter电面未通过
Code a non blocking thread safe queue问个二叉树删除结点的问题
问到linked list 的题目求教一道面试题
请教一道g算法题如何随机找二叉树中的任意节点?
Google second phone interview回馈本版,新鲜店面,新题新气象
delete a node in linked list热腾腾的 LinkedIn 电面题攒RP
请教一个二叉树镜像问题一道google面试题
相关话题的讨论汇总
话题: null话题: node话题: queue话题: temp话题: right