二叉树遍历的非递归算法
来源:互联网 发布:无网络访问 编辑:程序博客网 时间:2024/05/16 08:37
最近看了二叉树一章的数据结构内容,知道树这一章的遍历,根据字符序列建立二叉树,建立线索树,树与二叉树的转换,这些都涉及到了递归算法,都是先将问问题规模缩小,利用森林与二叉树之间的递归定义来巧妙的解决问题,看起来很复杂的问题,用递归很容易就解决了。
我们知道用递归算法的时候是函数的不断自我调用,知道到达截至条件,从中我们知道每次调用函数都要为函数分配空间(用于保存调用函数的的变量,传递被调用函数的参数变量),这些函数调用是后进先出的,由此被称作函数栈,它的性质与栈的后进先出是一致的。通过观察栈的调用情况,我们可以从中得到递归算法的非递归实现,其中函数栈通过自己建立一个栈的数据结构来实现。用这个栈配合代码,就能实现讲递归算法转换为非递归算法。
void postOrderTraversalIterative(BinaryTree *root) { if (!root) return; stack<BinaryTree*> s; s.push(root); BinaryTree *prev = NULL; while (!s.empty()) { BinaryTree *curr = s.top(); if (!prev || prev->left == curr || prev->right == curr) { if (curr->left) { s.push(curr->left); } else if (curr->right) { s.push(curr->right); } else { cout << curr->data << " "; s.pop(); } } else if (curr->left == prev) { if (curr->right) { s.push(curr->right); } else { cout << curr->data << " "; s.pop(); } } else if (curr->right == prev) { cout << curr->data << " "; s.pop(); } prev = curr; // record previously traversed node }}
上一周的作业
0 0
- 二叉树遍历的非递归算法
- 遍历二叉树的非递归算法
- 遍历二叉树的非递归算法
- 二叉树的遍历非递归算法
- 遍历二叉树的非递归算法
- 二叉树的遍历非递归算法
- 二叉树遍历的非递归算法
- 二叉树的非递归遍历算法
- 二叉树遍历的非递归算法
- 二叉树遍历的非递归算法
- 二叉树遍历的非递归算法
- 二叉树遍历的非递归算法
- 二叉树的非递归遍历算法
- 二叉树遍历的非递归算法
- 遍历二叉树的递归算法与非递归算法
- 二叉树的递归和非递归的遍历算法
- 遍历二叉树的递归和非递归算法
- 二叉树遍历的递归与非递归算法
- 重启apache遇到错误:Could not reliably determine the server's fully qualified domain name, using
- JAVA常用总结2
- 第三周作业
- IOS开发之——使用Segue在StoryBoard之间切换
- JXL操作Excel
- 二叉树遍历的非递归算法
- 在 GridView的RowCommand事件中取得相应的行号,主键值与某行某列的值
- linux/Unix进程控制(1)
- JDBC基本操作
- /dev/random与/dev/urandom
- 播放器的基本原理
- [leetCode]:Reverse Words in a String
- 从CreateFile(APP)到NtCreateFile(Kernel Mode)
- 20140423收盘小结