前序遍历
先结点再左右子树
使用栈的方式
- 输出结点(中) 压入栈中
- 左子树
- 右子树
遇到非空结点不停的压栈 若遇到空结点 指针指向栈顶元素的右结点 则栈顶元素弹出 继续
利用了栈先进后出的特点 每一次遇到空结点 我们首先要向上找它的父结点就是栈顶
//前序遍历非递归
void PreOderN(btlink T)
{
stack<btlink>st;
while(T!=NULL||!st.empty())//循环结束条件 结点不为空 栈不为空
{
if(T!=NULL)
{
cout<<" "<<T->data;//中
st.push(T);//将结点压入栈中
T=T->left; //左
}
else
{
T=st.top();
st.pop();
T