输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。

2014-11-24 02:02:55 · 作者: · 浏览: 1

第16题:
题目(微软):
输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
例如输入

8
/ \
6 10
/ \ / \
5 7 9 11

输出8 6 10 5 7 9 11。

[cpp] view plaincopyprint #include
#include
using namespace std;

struct BTreeNode
{
int m_Value;
BTreeNode* m_pLeft;
BTreeNode* m_pRight;
};

template
struct Node
{
T data;
Node *next;
};

template
class Myqueue
{
public:
Myqueue():front(NULL),rear(NULL){}
~Myqueue()
{
// Node * p;
while(!empty())
{
dequeue();
}
}
bool empty()
{
if(NULL==rear)
return true;
else
return false;
}
void enqueue(T t)
{
Node *p=new Node;
p->data=t;
p->next=NULL;
if(empty())
{
rear=front=p;
}
else
{
rear->next=p;
rear=p;
}
}
T dequeue()
{
T temp=front->data;
if(front==rear)
{
delete front;
rear=front=NULL;
}
else
{
Node * p=front;
front=front->next;
delete p;
}
return temp;
}
private:
Node *front;
Node *rear;
};
void print(BTreeNode * t)
{
if(NULL==t)
return ;
Myqueue MQ;
MQ.enqueue(t);
BTreeNode *TNode;
while(!MQ.empty())
{
TNode=MQ.dequeue();
cout<m_Value<<" ";
if(TNode->m_pLeft!=NULL)
MQ.enqueue(TNode->m_pLeft);
if(TNode->m_pRight!=NULL)
MQ.enqueue(TNode->m_pRight);
}
}
int main()
{
system("pause");
return 0;
}

#include
#include
using namespace std;

struct BTreeNode
{
int m_Value;
BTreeNode* m_pLeft;
BTreeNode* m_pRight;
};

template
struct Node
{
T data;
Node *next;
};

template
class Myqueue
{
public:
Myqueue():front(NULL),rear(NULL){}
~Myqueue()
{
// Node * p;
while(!empty())
{
dequeue();
}
}
bool empty()
{
if(NULL==rear)
return true;
else
return false;
}
void enqueue(T t)
{
Node *p=new Node;
p->data=t;
p->next=NULL;
if(empty())
{
rear=front=p;
}
else
{
rear->next=p;
rear=p;
}
}
T dequeue()
{
T temp=front->data;
if(front==rear)
{
delete front;
rear=front=NULL;
}
else
{
Node * p=front;
front=front->next;
delete p;
}
return temp;
}
private:
Node *front;
Node *rear;
};
void print(BTreeNode * t)
{
if(NULL==t)
return ;
Myqueue MQ;
MQ.enqueue(t);
BTreeNode *TNode;
while(!MQ.empty())
{
TNode=MQ.dequeue();
cout<m_Value<<" ";
if(TNode->m_pLeft!=NULL)
MQ.enqueue(TNode->m_pLeft);
if(TNode->m_pRight!=NULL)
MQ.enqueue(TNode->m_pRight);
}
}
int main()
{
system("pause");
return 0;
}
采用队列,从上到下从左到右的逐一打印出树中每个节点的值