二叉树遍历的核心问题:二维结构的线性化
队列实现:遍历从根结点开始,首先将根结点入队,然后开始执行循环:结点出队,访问该结点,其左右儿子入队。
void LevelOrderTraversal(BinTree BT)
{
Queue Q;
BinTree T;
if (!BT) return;/* 若是空树则直接返回*/
Q=CreateQueue(Maxsize);//创建并初始化队列Q
Add(Q,BT);
while(!isemptyQ(Q))
{
T=deleteQ(Q);
printf("%d\n",T->data);//访问取出队列的结点
if( T->Left) Add(Q,T->Left);
if(T->Right) Add(Q,T->Right);
}
}
尝试用堆栈的方式解决遍历问题:
void LevelOrderTraversal(BinTree BT)
{
Stack S;
BinTree T;
if(!BT) return ;
S=Createstack(Maxsize);
Push(S,BT)
while(!isempty(S))
{
T=pop(S);
cout<<T->data;
if(T->Right) Push(S,T->Right);
if(T->Left)Push(S,T->Left);
}
}