题目描述:对二叉树进行“弓”字形遍历,即第一层从左往右遍历,第二层从右往左遍历,第三层从左往右遍历.....
思路:传统的广度优先遍历,只需一个队列即可,但只能实现每层从左往右遍历。这里可以设两个栈,分别存放相邻两层的节点,先将某层节点存入一个栈,对这个栈的每个节点进行访问和出栈操作,在出栈的同时把它的孩子节点存入另一个栈,当这层的每个节点都操作完毕后,同时也实现了下一层节点在另一个栈的入栈操作。要注意的是,相邻两层的节点入栈的顺序是相反的,这样才能实现“弓”字形遍历。
代码如下:
typedef struct BiTNode{
ElemType data;
struct BiTNode *left;
struct BiTNode *right;}BiTNode, *BiTree;
void baidu_Traverse(BiTree T)
{
BiTree stack1[100], stack2[100];
BiTree *curstack, *otherstack;
BiTree p;
int top1 = 0, top2 = 0;
int curtop, othertop;
int flag = 0, temp, res;
//根节点入栈
stack1[top1++] = T;
//当前操作栈为stack1,另一个栈为stack2
curstack = stack1;