题目描述:对二叉树进行“弓”字形遍历,即第一层从左往右遍历,第二层从右往左遍历,第三层从左往右遍历.....
思路:传统的广度优先遍历,只需一个队列即可,但只能实现每层从左往右遍历。这里可以设两个栈,分别存放相邻两层的节点,先将某层节点存入一个栈,对这个栈的每个节点进行访问和出栈操作,在出栈的同时把它的孩子节点存入另一个栈,当这层的每个节点都操作完毕后,同时也实现了下一层节点在另一个栈的入栈操作。要注意的是,相邻两层的节点入栈的顺序是相反的,这样才能实现“弓”字形遍历。
代码如下:
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;
otherstack = stack2;
curtop = top1;
othertop = top2;
//遍历当前站
while(curtop >= 1){
curtop--;
p = curs

本文介绍了如何对二叉树进行‘弓’字形遍历,通过使用两个栈交替存放相邻层节点,实现从左往右和从右往左的交替遍历。详细阐述了算法思路,并提供了相关代码实现。
最低0.47元/天 解锁文章
8万+

被折叠的 条评论
为什么被折叠?



