本篇文章主要详解利用栈的方式二叉树先序、中序、后序遍历的非递归写法
首先我们需要实现一颗二叉树。
以下是通过先序序列建树的代码
例如:先序序列{1,2,4,10,'#','#',6,11,'#','#',7'#','#','#',3,8,'#','#',9}代表以下的树

-
typedef struct Node -
{ -
int _data; -
Node* _right; -
Node* _left; -
Node() -
{} -
Node(int x) -
{ -
_data = x; -
_left = NULL; -
_right = NULL; -
} -
}*pNode;
//参数类型arr 数组指针,index 下标,size 数组元素个数,invalid代表先序遍历时遇到的NULL
pNode createTree_PrevOrder( const int* arr, size_t& index,const size_t size,int invalid){Node* root = NULL;if (index < size && arr[index] != invalid){root = new Node(arr[index]);root->_left = createTree_PrevOrder(arr, ++index, size, invalid);root->_right = createTree_PrevOrder(arr, ++index, size, invalid);}return root;}
先序非递归:
先序遍历时,每当我们压入一个结点,我们压入结点前对其进行访问。
-
void prevOrder_NR(pNode root) -
{ -
if (NULL == root) -
cout <

本文详细介绍了如何使用栈非递归地实现二叉树的先序、中序和后序遍历。在先序遍历中,访问结点后再压栈;中序遍历则需要在遍历完左子树后访问根节点;后序遍历需保持根结点直到左右子树都访问过,同时为了避免死循环,需要记录上次访问的结点。
最低0.47元/天 解锁文章
265

被折叠的 条评论
为什么被折叠?



