(晚上写这个停不下来啊。。赶紧写完不然回不了宿舍咯)
层序打印题目的意思大家都懂吧,平时我们前序遍历,中序遍历,后续遍历的话用递归很容易搞定,但是这个问题啊,一用递归貌似就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。。,欢迎指出)
文章参考何海涛大神文章
网友评论