PTA Build A Binary Search Tree(C语言)

题目

A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:

  • The left subtree of a node contains only nodes with keys less than the node‘s key.
  • The right subtree of a node contains only nodes with keys greater than or equal to the node‘s key.
  • Both the left and right subtrees must also be binary search trees.

Given the structure of a binary tree and a sequence of distinct integer keys, there is only one way to fill these keys into the tree so that the resulting tree satisfies the definition of a BST. You are supposed to output the level order traversal sequence of that tree. The sample is illustrated by Figure 1 and 2.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (\le≤100) which is the total number of nodes in the tree. The next N lines each contains the left and the right children of a node in the format left_index right_index, provided that the nodes are numbered from 0 to N-1, and 0 is always the root. If one child is missing, then -1 will represent the NULL child pointer. Finally N distinct integer keys are given in the last line.

Output Specification:

For each test case, print in one line the level order traversal sequence of that tree. All the numbers must be separated by a space, with no extra space at the end of the line.

Sample Input:

9
1 6
2 3
-1 -1
-1 4
5 -1
-1 -1
7 -1
-1 8
-1 -1
73 45 11 58 82 25 67 38 42

Sample Output:

58 25 82 11 38 67 45 73 42

解答这道题目只要把输入的树从小到大依次赋值给树的中缀遍历结果的节点就好了。
 1 //
 2 //  main.c
 3 //  5-1 Build A Binary Search Tree
 4 //
 5 //  Created by 余南龙 on 2016/10/26.
 6 //  Copyright ? 2016年 余南龙. All rights reserved.
 7 //
 8
 9 #include <stdio.h>
10 #include <stdlib.h>
11
12 typedef struct node BST;
13 struct node{
14     int key;
15     struct node *l_child, *r_child;
16 };
17
18 BST *T;
19 int *inorder, *val;
20 int j = 0;
21
22 int Comp(const void *a, const void *b){
23     return *(int*)a - *(int*)b;
24 }
25
26 void Inorder(BST *root){
27     if(NULL == root){
28         return;
29     }
30
31     Inorder(root->l_child);
32     root->key = val[j];
33     j++;
34     Inorder(root->r_child);
35 }
36
37 int main(void) {
38     int size, i, l_child, r_child, tail = 1;
39     BST *Q;
40     int *visit;
41
42     scanf("%d", &size);
43     T = (BST*)malloc(sizeof(BST) * size);
44     Q = (BST*)malloc(sizeof(BST) * size);
45     val = (int*)malloc(sizeof(int) * size);
46     inorder = (int*)malloc(sizeof(int) * size);
47     visit = (int*)calloc(size, sizeof(int));
48     for(i = 0; i < size; i++){
49         scanf("%d%d", &l_child, &r_child);
50         if(-1 != l_child){
51             T[i].l_child = T + l_child;
52             visit[l_child] = 1;
53         }
54         else{
55             T[i].l_child = NULL;
56         }
57         if(-1 != r_child){
58             T[i].r_child = T + r_child;
59             visit[r_child] = 1;
60         }
61         else{
62             T[i].r_child = NULL;
63         }
64     }
65     for(i = 0; i < size; i++){
66         scanf("%d", val + i);
67     }
68     qsort(val, size, sizeof(int), Comp);
69     for(i = 0; i < size; i++){
70         if(0 == visit[i]){
71             break;
72         }
73     }
74     Inorder(T + i);
75     Q[0] = T[i];
76     for(i = 0; i < size; i++){
77         if(0 == i){
78             printf("%d", Q[i].key);
79         }
80         else{
81             printf(" %d", Q[i].key);
82         }
83
84         if(NULL != Q[i].l_child){
85             Q[tail++] = *(Q[i].l_child);
86         }
87         if(NULL != Q[i].r_child){
88             Q[tail++] = *(Q[i].r_child);
89         }
90     }
91
92     return 0;
93 }
时间: 2024-10-21 15:11:53

PTA Build A Binary Search Tree(C语言)的相关文章

pat1099. Build A Binary Search Tree (30)

1099. Build A Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only

1099. Build A Binary Search Tree (30)【二叉树】——PAT (Advanced Level) Practise

题目信息 1099. Build A Binary Search Tree (30) 时间限制100 ms 内存限制65536 kB 代码长度限制16000 B A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than

PAT 1099. Build A Binary Search Tree (30)

1099. Build A Binary Search Tree (30) A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than the node's key. The right subtree of a nod

1099. Build A Binary Search Tree (30)

A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than the node's key. The right subtree of a node contains only nodes with keys greate

PAT 甲级 1099 Build A Binary Search Tree

https://pintia.cn/problem-sets/994805342720868352/problems/994805367987355648 A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than th

PAT Advanced 1099 Build A Binary Search Tree (30分)

A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than the node's key. The right subtree of a node contains only nodes with keys greate

PAT Advanced 1099 Build A Binary Search Tree (30) [?叉查找树BST]

题目 A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than the node's key. The right subtree of a node contains only nodes with keys gre

1099 Build A Binary Search Tree [二叉搜索树/中序、层次遍历]

先用中序确定节点的值,再用层次遍历输出即可. 写的时候思维江化,一开始用指针建树... #include <bits/stdc++.h> using namespace std; #define maxn 105 struct Node { int index,left,right; }node[maxn]; int n,a[maxn],tree[maxn]; vector<int> ve[maxn],in,post; void inorder(int p) { if(node[p

PAT-1099(Build A Binary Search Tree)

题目见这里 (分析) 分四步进行: 1)根据给定的结点情况建二叉树  2)对输入的键值排序(asending) 3)对二叉树中序遍历,同时对应赋key值 4)层次遍历(队列应用) 题目并不困难,但是我误入了trick,错误假定了结点按先序遍历是按顺序编号的(当然是受样例的影响),所以有了下面22分(满分30) 的submit(贴出来是因为这不失为好的巩固二叉树知识的程序) #include <stdio.h> #include <stdlib.h> //qsort,malloc #