C算法&面试题程序员

层序打印树

2016-04-01  本文已影响106人  AwesomeAshe

(晚上写这个停不下来啊。。赶紧写完不然回不了宿舍咯)

层序打印

题目的意思大家都懂吧,平时我们前序遍历,中序遍历,后续遍历的话用递归很容易搞定,但是这个问题啊,一用递归貌似就GG了(只是我想不出来),因为用递归的话,会向深度发展(我感觉),所以只能另找一条路了。

这种方法必须是,每次只走一步,不要一次性走到底的!
上哪里去找这么听话的。。呢?

跟上篇文章一样
栈模拟递归
这里我们也使用一个队列来存储所经过的节点,上次没有深入的思考,其实手动的用队列去存储经过的节点话,每次只执行一次的!

也就是说,这样既能简单的遍历树,并且每次还只往下走一步!

太完美了!

所以呢,跟上次一样,我们存储经过的路径,只不过这里我们需要一个先进先出的容器,我们选择了队列,路线就是:push->print->pop

下面是代码:

void printTreeTopDown(treeNode* tree)
{
    if (!tree)
        return;
    std::deque<treeNode*> nodeDeque;
    nodeDeque.push_back(tree);
    while (nodeDeque.size())
    {
        treeNode* tmp = nodeDeque.front();
        nodeDeque.pop_front();
        std::cout << tmp->data << " ";

        if (tree->left)
            nodeDeque.push_back(tree->left);
        if (tree->right)
            nodeDeque.push_back(tree->right);
    }
}

(我并没有去测试代码,所以不知道有没有bug。。,欢迎指出)
文章参考何海涛大神文章

上一篇 下一篇

猜你喜欢

热点阅读