第一次写时候的思路,略显得麻烦
#include <stdio.h>
#include <stdlib.h>
#define maxsize 21
typedef struct treenode
{
int data;
struct treenode *left;
struct treenode *right;
int level;
} TreeNode, *BinTree;
typedef struct queue
{
int front, rear;
BinTree root[maxsize];
} Queue;
void enqueue(Queue *q, BinTree root)
{
if ((q->rear + 1) % maxsize != q->front)
{
q->rear = (q->rear + 1) % maxsize;
q->root[q->rear] = root;
}
}
BinTree dequeue(Queue *q)
{
if (q->front == q->rear)
{
return NULL;
}
else
{
q->front = (q->front + 1) % maxsize;
return q->root[q->front];
}
}
BinTree create(BinTree root, int data, int level)
{
if (root == NULL)
{
BinTree p = (BinTree)malloc(sizeof(TreeNode));
p->right = p->left = NULL;
p->data = data;
p->level = level;
root = p;
}
if (data > root->data)
root->right = create(root->right, data, ++level);
else if (data < root->data)
root->left = create(root->left, data, ++level);
return root;
}
void Inorder(BinTree root)
{
if (root)
{
Inorder(root->left);
printf("root->data=%d root->level=%d\n", root->data, root->level);
Inorder(root->right);
}
}
int LevelOrder(BinTree root, int level_need)
{
Queue *q = (Queue *)malloc(sizeof(Queue));
q->front = q->rear = 0;
q->root[++q->rear] = root;
//int level_now = 1;
int check = 0;
while (q->front != q->rear) //队列不为空
{
BinTree temp = dequeue(q);
if (temp->level == level_need)
{
check++;
printf("%d,", temp->data);
}
//check = 0;
if (temp->left)
{
enqueue(q, temp->left);
}
if (temp->right)
{
enqueue(q, temp->right);
}
}
return check;
}
int main()
{
int n;
scanf("%d", &n);
int data;
BinTree root = (BinTree)malloc(sizeof(TreeNode));
root->left = root->right = NULL;
n--;
scanf("%d,", &data);
root->data = data;
//printf("root=%d\n", root->data);
int level = 1;
root->level = level;
while (n--)
{
scanf("%d,", &data);
root = create(root, data, level);
}
int level_need;
scanf("%d", &level_need);
//Inorder(root);
int ret=LevelOrder(root, level_need);
if(ret==0)
{
printf("-1");
}
return 0;
}
第二次做题的思路
#include <stdlib.h>
#include <stdio.h>
typedef struct treenode
{
int data;
int level;
struct treenode *left;
struct treenode *right;
} TreeNode;
int check=0;
TreeNode *create(TreeNode *root, int data, int level)
{
if (root == NULL)
{
TreeNode *p = (TreeNode *)malloc(sizeof(TreeNode));
p->data = data;
p->level = level;
p->left = p->right = NULL;
root = p;
}
else
{
if (root->data > data)
{
root->left = create(root->left, data, ++level);
}
else if (root->data < data)
{
root->right = create(root->right, data, ++level);
}
}
return root;
}
void PreOrder(TreeNode *root, int print)
{
if (root)
{
if (print == root->level)
{
check++;
printf("%d,", root->data);
}
PreOrder(root->left,print);
PreOrder(root->right,print);
}
}
int main()
{
int m;
scanf("%d", &m);
int data;
TreeNode *root = NULL;
int level = 1;
for (int i = 0; i < m; i++)
{
scanf("%d,", &data);
root = create(root, data, level);
}
int print;
scanf("%d", &print);
PreOrder(root, print);
if(check==0)
printf("-1");
return 0;
}