本篇文章主要详解利用栈的方式二叉树先序、中序、后序遍历的非递归写法
首先我们需要实现一颗二叉树。
以下是通过先序序列建树的代码
例如:先序序列{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 <