1.将根节点压入栈中
2.进入循环:只要栈中元素个数大于0,进行循环操作
2.1弹出栈顶元素
2.2如果这个栈顶元素标记为真,输出这个元素并且执行下次循环
2.3如果栈顶元素为假,将节点的标志设为真
2.4将该节点的右子树、左子树、根压入栈中
2.5执行下一次循环
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct BinaryNode
{
char ch;
struct BinaryNode*lChild //左子树节点
struct BinaryNode*rChild//右子树节点
int flag;
};
/*
1.将根节点压入栈中
2.只要栈size>0 执行循环
*/
void nonReursion(struct BinaryNode root)
{
//初始化栈
seqStack myStack=init_SeqStack();
push_SeqStack(myStack,root);//1.将根节点压入栈中
while(size_SeqStack(myStack)>0);//2.只要栈size>0 执行循环
{
}
}
void tset()
{
struct BinaryNode nodeA={'A',NULL,NULL};
struct BinaryNode nodeB={'B',NULL,NULL};
struct BinaryNode nodeC={'C',NULL,NULL};
struct BinaryNode nodeD={'D',NULL,NULL};
struct BinaryNode nodeE={'E',NULL,NULL};
struct BinaryNode nodeF={'F',NULL,NULL};
struct BinaryNode nodeG={'G',NULL,NULL};
struct BinaryNode nodeH={'H',NULL,NULL};
}
//建立节点关系
nodeA.lChild=&nodeB;
nodeA.rChild=&nodeF;
nodeB.rChild=&nodeC;
nodeC.rChild=&nodeE;
nodeC.lChild=&nodeD;
nodeF.rChild=&nodeG;
nodeG.lChild=&nodeH;
//执行非递归遍历
nonReursion(&nodeA);
}
int main()
{
system("puase");
return EXIT_SUCCESS;
}