2011百度实习生面试题-二叉树“弓”字形遍历

本文介绍了如何对二叉树进行‘弓’字形遍历,通过使用两个栈交替存放相邻层节点,实现从左往右和从右往左的交替遍历。详细阐述了算法思路,并提供了相关代码实现。
摘要由CSDN通过智能技术生成

题目描述:对二叉树进行“弓”字形遍历,即第一层从左往右遍历,第二层从右往左遍历,第三层从左往右遍历.....

思路:传统的广度优先遍历,只需一个队列即可,但只能实现每层从左往右遍历。这里可以设两个栈,分别存放相邻两层的节点,先将某层节点存入一个栈,对这个栈的每个节点进行访问和出栈操作,在出栈的同时把它的孩子节点存入另一个栈,当这层的每个节点都操作完毕后,同时也实现了下一层节点在另一个栈的入栈操作。要注意的是,相邻两层的节点入栈的顺序是相反的,这样才能实现“弓”字形遍历。

 

代码如下:

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;   
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值