33,008
社区成员
发帖
与我相关
我的任务
分享
for (i = 1; i <= n; i++)
{
cin >> l >> r >> v;
left[i] = l;
right[i] = r;
value[i] = v;
parent[l]=parent[r]=i
parent[i]=-1;
}
//第16题:题目:输入一颗二元查找树,把它按层次遍历
//这道题我是很有感触的,记得一个月前我去面试莱科,就出过这道题,当时硬是不会
//一个月过去了,现在我可以一下就ko它,进步蛮快的(代码真的是要多写才行)
//算法思想:从队头中取结点,遍历该结点,如果它的孩子非空,把孩子加到队尾
//如此重复,直到队头等于队尾
#include<stdio.h>
#include<malloc.h>
//定义二叉树结点结构
struct node
{
int data;
struct node *left;
struct node *right;
};
typedef struct node treenode; //二叉树结点,作辅助暂存
typedef struct node * ptreenode; //二叉树
//往root为根的二叉树加入新的结点
ptreenode addtreenode(ptreenode root,int e)
{
int flag;
ptreenode current,newnode,frontcurrent;
newnode=(ptreenode)malloc(sizeof(treenode));
if(newnode==NULL)
return NULL;
else
{
newnode->data=e;
newnode->left=newnode->right=NULL;
}
current=root;
if(current==NULL)
return newnode;
else
{
while(current!=NULL)
{
frontcurrent=current;
if(newnode->data>=current->data)
{ current=current->right;
flag=1;
}
else
{ flag=0;
current=current->left;
}
}
if(flag==1)
frontcurrent->right=newnode;
else
frontcurrent->left=newnode;
}
return root;
}
//树的广度优先搜索
void bfstree(ptreenode root)
{
ptreenode p[10];//开一数组并且在逻辑上认为是队列
int f,r; //维护两个指针,一个指向其队头,一个指向其队尾
f=r=0; //队列空时,两指针相等
if(root==NULL)
return;
p[r++]=root;//把第一个根结点入队
while(f<r)//队列非空时表明遍历没结束
{
printf("%d ",p[f]->data); //遍历该结点
if(p[f]->left!=NULL) //如果存在孩子就把它入队
p[r++]=p[f]->left;
if(p[f]->right!=NULL)
p[r++]=p[f]->right;
f++;
}
}
void main()
{
while(1){
ptreenode treeroot=NULL;
int k;
do{
scanf("%d",&k);
treeroot=addtreenode(treeroot,k);//把新输入的结点加到原来树中,结点0时结束
}while(k!=0);
bfstree(treeroot);
}
}
#include <iostream>
using namespace std;
const int MAXN = 1001;
int main()
{
int left[MAXN], right[MAXN], value[MAXN], qu[MAXN];
int n, l, r, v;
int qu_b, qu_e;
int i, k;
while (cin >> n && n != 0)
{
for (i = 1; i <= n; i++)
{
cin >> l >> r >> v;
left[i] = l;
right[i] = r;
value[i] = v;
}
qu_b = 0;
qu_e = 0;
qu[qu_e] = 1;
qu_e++;
while (qu_b != qu_e)
{
k = qu[qu_b++];
cout << value[k] << " ";
if (left[k])
qu[qu_e++] = left[k];
if (right[k])
qu[qu_e++] = right[k];
}
cout << endl;
}
return 0;
}