自上至下,自左而右打印一棵二叉树(Tree) 算法

自上至下,自左而右打印一棵二叉树(Tree) 算法

解题思路:采用两个队列(Queue)辅助实现。

算法描述:

Tree *t;// 定义一棵二叉树,指向二叉树的根节点

Queue *q1,*q2; //定义两个队列

Push(q1,t); // 将二叉树根节点压入队列q1

while(q1!=null&&q2!=null) //如果队列q1,q2均为空表示已经打印完毕

{

 if(q2==null) //(如果q2为空,q1不为空)

 {

    while(q1!=null)//直到q1为空结束

    {

      TreeNode *n=pop(q1); //q1出队

      Printf n->Data;//并打印

      if(n->LNode!=null)

       {push(q2,n->LNode);}// 如果有左孩子,压入队列q2

      if(n->RNode!=null)

       {push(q2,n->RNode);}// 如果有右孩子,压入队列q2

    }

 }

 if(q1==null) //如果q1为空,q2不为空

 {

    while(q2!=null)// 直到q2为空结束

    {

      TreeNode *n=pop(q2); //q2出队

      Printf n->Data; //并打印

      if(n->LNode!=null)

       {push(q1,n->LNode);} // 如果有左孩子,压入队列q1

      if(n->RNode!=null)

       {push(q1,n->RNode);} // 如果有右孩子,压入队列q1

    }

 }

}

posted @ 2008-07-16 17:36  火火  阅读(698)  评论(1编辑  收藏  举报