层序打印树

作者: AwesomeAshe | 来源:发表于2016-04-01 22:37 被阅读106次

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

    层序打印

    题目的意思大家都懂吧,平时我们前序遍历,中序遍历,后续遍历的话用递归很容易搞定,但是这个问题啊,一用递归貌似就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。。,欢迎指出)
    文章参考何海涛大神文章

    相关文章

      网友评论

      • __七把刀__:层序打印还有个递归的算法也不错 很简洁
        AwesomeAshe:@__七把刀__ 谢谢:-)
        __七把刀__:@AwesomeAshe http://blog.csdn.net/sgbfblog/article/details/7773002 以前找工作的时候总结过二叉树的一些算法题, :smile:
        AwesomeAshe:@__七把刀__ 说来听听

      本文标题:层序打印树

      本文链接:https://www.haomeiwen.com/subject/ilmylttx.html