二叉树的前序遍历的非递归算法(二)
2012-12-26 15:27
260 查看
在二叉树的前序遍历的非递归算法(一)中使用的算法是比较烦的,下面介绍一下较简单点的算法,理解起来更容易。
前序遍历是先遍历根结点,然后分别是左、右结点,对于左右子树使用同样的思想,那么我们可以使用一个堆栈,一开始将根结点压入堆栈,然后开始循环,先将堆栈顶元素弹出,然后访问,然后依次将其右结点和左结点压入堆栈,注意是先右后左而不是先左后右。此过程直到堆栈为空。
算法实现如下:
void preOrderIter(struct node *root)
{
if (root == NULL) return;
stack<struct node *> s;
s.push(root);
while (!s.empty()) {
struct node *nd = s.top();
cout << nd->data << " ";
s.pop();
if (nd->right != NULL)
s.push(nd->right);
if (nd->left != NULL)
s.push(nd->left);
}
cout << endl;
}
前序遍历是先遍历根结点,然后分别是左、右结点,对于左右子树使用同样的思想,那么我们可以使用一个堆栈,一开始将根结点压入堆栈,然后开始循环,先将堆栈顶元素弹出,然后访问,然后依次将其右结点和左结点压入堆栈,注意是先右后左而不是先左后右。此过程直到堆栈为空。
算法实现如下:
void preOrderIter(struct node *root)
{
if (root == NULL) return;
stack<struct node *> s;
s.push(root);
while (!s.empty()) {
struct node *nd = s.top();
cout << nd->data << " ";
s.pop();
if (nd->right != NULL)
s.push(nd->right);
if (nd->left != NULL)
s.push(nd->left);
}
cout << endl;
}
相关文章推荐
- 二叉树的前序遍历、中序遍历和后序遍历的递归和非递归算法
- 二叉树的前序遍历的非递归算法(一)
- 数据结构-----前序遍历二叉树非递归算法(利用堆栈实现)
- LintCode之66 二叉树的前序遍历
- 二叉树的前序遍历、中序遍历及后序遍历
- 二叉树三种遍历的非递归算法
- [算法与数据结构] - No.7 二叉树建立及其前序、中序、后序遍历
- 二叉树的前序、中序、后序遍历的非递归算法及层次遍历算法
- 二叉树的前序遍历
- 剑指offer给定二叉树,求中序遍历的下一个 节点,前序遍历,后序遍历扩展
- 二叉树前序、中序、后序三种遍历的非递归算法
- 二叉树的前序遍历
- 二叉树的前序遍历非递归形式
- 二叉树的深度与广度遍历及前序遍历递归非递归实现
- 重建二叉树,给出一个二叉树的前序和中序遍历,恢复二叉树的结构
- 二叉树的前序遍历
- 输入完全二叉树的先序序列,用#代表虚结点(空指针),如ABD###CE##F##,建立二叉树的二叉链表。 (2)写出对用二叉链表存储的二叉树进行先序、中序和后序遍历的递归和非递归算法。 (3)写出
- 二叉树的后序遍历非递归算法之C++实现 选择自 xuyongfeng 的 Blog
- LeetCode算法题集-144. Binary Tree Preorder Traversal(二叉树的前序遍历,不用递归实现)
- 面试题 二叉树的前序遍历,中序遍历,后序遍历(递归实现)