非递归实现二叉树的先序遍历,中序遍历,后序遍历
1. 二叉树先序遍历(非递归)
先序的遍历的访问顺序为先根节点,再左孩子,最后右孩子。
所以,根据栈后进先出的特点,应先入栈右孩子,再入栈左孩子。
先序遍历,借助栈实现
1根节点入栈
2判断栈顶元素是否为空
3访问栈顶元素,出栈
4栈顶元素的右孩子若不为空,入栈。栈顶元素的左孩子不为空,入栈。
5循环2-4
9 void TreePreLoop(TreeNode* root)
10 {
11 if(root==NULL)
12 {
13 return ;
14 }
15 //定义一个栈
16 SeqStack stack;
17 //栈的初始化
18 SeqStackInit;
19 //定义栈顶元素类型
20 SeqStackType top;
21 //根节点入栈
22 SeqStcakPush(&stack,root);
23 while(1)
24 {
25 int ret=SeqStackTop(&stack,&top);
26 if(ret==-1)
27 {
28 return ;
29 }
30 printf("%c",top->data);
31 SeqStackPop(&stack);
32