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 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 (<=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 #include<cstdio>
 2 #include<stack>
 3 #include<algorithm>
 4 #include<iostream>
 5 #include<stack>
 6 #include<queue>
 7 #include<map>
 8 using namespace std;
 9 struct node{
10     int l,r,v;
11 };
12 node tree[105];
13 int line[105];
14 int calnum(int num){
15     if(num==-1){
16         return 0;
17     }
18     return calnum(tree[num].l)+calnum(tree[num].r)+1;
19     }
20 void BuildAVL(int mid,int *line){
21     if(mid==-1){
22         return ;
23     }
24     int count=calnum(tree[mid].l);//统计左子树
25
26     //cout<<count<<endl;
27
28     tree[mid].v=line[count];
29     BuildAVL(tree[mid].l,line);
30     BuildAVL(tree[mid].r,line+count+1);
31 }
32 int main(){
33     //freopen("D:\\INPUT.txt","r",stdin);
34     int n;
35     scanf("%d",&n);
36     int i;
37     for(i=0;i<n;i++){
38         scanf("%d %d",&tree[i].l,&tree[i].r);
39     }
40     for(i=0;i<n;i++){
41         scanf("%d",&line[i]);
42     }
43     sort(line,line+n);
44
45     /*for(i=0;i<n;i++){
46         cout<<i<<" "<<line[i]<<endl;
47     }*/
48
49     BuildAVL(0,line);
50
51     //cout<<":"<<"  "<<tree[0].v<<endl;
52
53     queue<int> q;
54     int cur;
55     q.push(0);
56     printf("%d",tree[0].v);
57     while(!q.empty()){
58         cur=q.front();
59         q.pop();
60         //cout<<"cur:  "<<cur<<endl;
61
62         if(tree[cur].l!=-1){
63             q.push(tree[cur].l);
64             printf(" %d",tree[tree[cur].l].v);
65         }
66         if(tree[cur].r!=-1){
67             q.push(tree[cur].r);
68             printf(" %d",tree[tree[cur].r].v);
69         }
70     }
71     printf("\n");
72     return 0;
73 }
时间: 2024-10-23 05:45:22

pat1099. Build A Binary Search Tree (30)的相关文章

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 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

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 #

【PAT甲级】1099 Build A Binary Search Tree (30 分)

题意: 输入一个正整数N(<=100),接着输入N行每行包括0~N-1结点的左右子结点,接着输入一行N个数表示数的结点值.输出这颗二叉排序树的层次遍历. AAAAAccepted code: 1 #define HAVE_STRUCT_TIMESPEC 2 #include<bits/stdc++.h> 3 using namespace std; 4 pair<int,int>a[107]; 5 int b[107]; 6 int cnt=0; 7 int ans[107]

PAT (Advanced Level) 1099. Build A Binary Search Tree (30)

预处理每个节点左子树有多少个点. 然后确定值得时候递归下去就可以了. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<map> #include<queue> #include<stack> #include<algorithm> using namespace std; struct Node { int

PAT甲题题解1099. Build A Binary Search Tree (30)-二叉树遍历

题目就是给出一棵二叉搜索树,已知根节点为0,并且给出一个序列要插入到这课二叉树中,求这棵二叉树层次遍历后的序列. 用结构体建立节点,val表示该节点存储的值,left指向左孩子,right指向右孩子.中序遍历的顺序正好是序列从小到大的顺序,因此中序遍历的时候顺便赋值就可以了,最后层次遍历输出. 思路一:中序遍历的时候赋值 #include <iostream> #include <cstdio> #include <algorithm> #include <str