老师,看了您的视频,我对前序遍历的非递归写法有了清晰的理解。然后我自己想动手写一下后序遍历的非递归写法,但是,我对递归转非递归还是不是很明白,所以没写出来。
然后我就参考了您在第一课推荐的github上c++版本的代码库,对于中序遍历的非递归写法我明白了,但是他写的后序遍历,我通过调试能看懂他的运行顺序,但是不明白这个是怎么样的一个思想,是如何写出来的?
所以我想问bobobo老师两个问题
1.麻烦老师可不可简单的说一下后序遍历的非递归写法的思想呢
2.老师我觉得递归转非递归我还不是很清晰,所以您觉得我问题出在哪呢?
谢谢老师,然后我附上github上c++版的后序非递归算法实现
void postOrderNR() {
std::stack<Node<T> *> stack;
Node<T> *cur = root;
Node<T> *temp;
while (cur != nullptr || !stack.empty()) {
while (cur != nullptr) {
stack.push(cur);
cur = cur->left;
}
if (!stack.empty()) {
cur = stack.top();
if (cur->right == temp || cur->right == nullptr){
std::cout << cur->e << " ";
stack.pop();
temp = cur;
cur = nullptr;
}else {
cur = cur->right;
}
}
}
std::cout << std::endl;
}