题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印(层次遍历)。
#include "stdlib.h"
#include "iostream"
#include "stack"
#include "queue"
using namespace std;
typedef int KeyType;
typedef struct Node
{
KeyType key;
struct Node* left;
struct Node* right;
struct Node* parent;
}Node,*pNode;
void insert(pNode* root,KeyType key)
{ //初始化插入结点
pNode p =(pNode)malloc(sizeof(Node));
p->key =key;
p->left =p->right =p->parent =NULL;
if((*root)==NULL){
*root =p;
return;
}
//插入到当前结点(*root)的左孩子
if ((*root)->left ==NULL&&(*root)->key>key)
{
p->parent =(*root);
(*root)->left =p;
return;
}
if ((*root)->right ==NULL&&(*root)->key<key)
{
p->parent =(*root);
(*root)->right =p;
return;
}
if ((*root)->key>key)
{
insert(&(*root)->left,key);
}
else if((*root)->key<key)
insert(&(*root)->right,key);
else
return;
}
void create(pNode* root,KeyType *keyArray,int length)
{
int i;
//逐个结点插入二叉树
for (i=0;i<length;i++)
{
insert(root,keyArray[i]);
}
}
void print(pNode root)
{
queue<pNode> queue1;
pNode p;
if (root)
{
queue1.push(root);
}
while(!queue1.empty())
{
p =queue1.front();
cout<<p->key<<" "<<endl;
if (p->left)
{
queue1.push(p->left);
}
if (p->right)
{
queue1.push(p->right);
}
queue1.pop();
}
}
int main()
{
int i;
//注意这种传参数的方式,以root地址作为参数,返回根节点的指针
pNode root =NULL;
KeyType nodeArray[11] ={15,6,18,3,7,17,20,2,4,13,9};
create(&root,nodeArray,11);
//inorderTraver(root);
print(root);
printf("\n");
}