二叉树的迭代法前序遍历
二叉树的前序遍历的顺序为:中左右。如下图,打印顺序为:
’3’->’9’->’15’->’4’->’7’->’1’->’20’->’0’
方法一:模拟递归法实现的递归过程
递归的过程为:
(1)每次在将左节点入栈之前,打印节点数据,直到最左节点为空。如打印节点’3’,然后再压入栈中;打印左节点’9’,然后再压入栈中。
(2)取出栈中的节点最左结点’15’,并将其从栈中删除;
(3)查找取出节点的右边节点,为空则重复(2),不为空,将右节点压入栈中,重复(1)。
代码如下:
void PreOrder(TreeNode* node)
{
stack<TreeNode*> st;
TreeNode* current = node;
st.push(current);
while (!st.empty()){
/*第一步*/
while (current){
cout << current->data << " ";//打印数据
current = current->leftChild;//每次都指向左节点
if (current) st.push(current);//左节点不空,就压入栈中
}
/*第二步,取出节点并删除*/
current = st.top();
st.pop();
/*第三步,处理右节点*/
if (current->rightChild){
current = current->rightChild;
st.push(current);
}
else{
current = nullptr;
}
}
}
方法二:按照“中左右”的遍历顺寻,将父节点和左右子节点入栈
从栈中取出节点&#