首页 > 其他分享 >1099 Build A Binary Search Tree

1099 Build A Binary Search Tree

时间:2023-05-23 09:57:03浏览次数:40  
标签:Binary Search right int inorder Tree tree nodes root

题目:

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.

figBST.jpg

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 −1will 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

 

题目大意:

给出一棵二叉搜索树(给出每个结点的左右孩子),且已知根结点为0,求并且给出应该插入这个二叉搜索树的数值,求这棵二叉树的层序遍历

 

思路:

将BST所有结点的值进行从小到大排序,就可以得到该BST的中序遍历。

已知树的结构,将这些结点的值按照中序遍历填入结点即可。具体代码如下:

int k = 0;
void inorder(int root){
    if(root >= n || root < 0)return;
    inorder(nodes[root].lchild);
    nodes[root].w = w[k++];
    inorder(nodes[root].rchild);
}

 

 

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
int n, k = 0;
int w[105];
bool flag = false;
struct Node{
    int w, lchild, rchild;
}nodes[105];
void inorder(int root){
    if(root >= n || root < 0)return;
    inorder(nodes[root].lchild);
    nodes[root].w = w[k++];
    inorder(nodes[root].rchild);
}
void levelOrder(int root){
    queue<int> q;
    q.push(root);
    while(!q.empty()){
        int tmp = q.front();
        q.pop();
        if(flag){
            printf(" ");
        }else{
            flag = true;
        }
        printf("%d", nodes[tmp].w);
        int left = nodes[tmp].lchild;
        int right = nodes[tmp].rchild;
        if(left != -1) q.push(left);
        if(right != -1)q.push(right);
    }
}
int main(){
    scanf("%d", &n);
    for(int i = 0; i < n; i++){
        int l,r;
        scanf("%d%d", &l, &r);
        nodes[i].lchild = l;
        nodes[i].rchild = r;
    }
    for(int i = 0; i < n; i++){
        scanf("%d", &w[i]);
    }
    sort(w,w+n); 
    inorder(0);
    levelOrder(0);
    return 0;
}

 

标签:Binary,Search,right,int,inorder,Tree,tree,nodes,root
From: https://www.cnblogs.com/yccy/p/17422438.html

相关文章

  • java学习日记20230522-TreeSet
    有序键值对集合publicclassTreeSetExercise{publicstaticvoidmain(String[]args){Integerinteger=newInteger(10);TreeSettreeSet=newTreeSet(newComparator(){@Overridepublicintcompare(Objecto1,Obj......
  • SVN commit:remains in tree-conflict错误的解决办法
    昨天在提交一个新类包的时候,出错了,重新提交了几次也不行.Abortingcommit:‘C:/workspace/MyWork/src/org’remainsinconflict由于是新第一次提交,感觉上应该是没有问题的.最后上网找了一下,发现了解决办法.Eclipse中的解决办法右击工程目录–>team–>ShowTreeConflict......
  • AtCoder Regular Contest 132 D Between Two Binary Strings
    洛谷传送门AtCoder传送门提供一个dp思路。下文设串长为\(n\),串中\(1\)个数为\(m\)。考虑如何求\(d(s,t)\)。设\(s\)的\(1\)位置分别为\(a_1,a_2,...,a_m\),\(t\)的\(1\)位置分别为\(b_1,b_2,...,b_m\)。那么\(d(s,t)=\sum\limits_{i=1}^m|a_i-b......
  • 论elasticsearch在Windows环境的安装
    前置需求一台电脑(我用的是Windows),有网第一步:下载并安装去java官网下载开发版java(考虑到可能有小白,我暂且这么说)java官网下载链接:https://www.oracle.com/java/technologies/downloads/写随笔时间为2023、05、22,建议使用java17下载好java之后,因为是msi格式的文件,Windows可......
  • rocky Elasticsearch 8.7.1集群 x-spack 安全验证 及 集群内部TLS加密传输 (ca)
    目录简介环境准备安装配置hostname解析安装systemd脚本ca证书配置给所有ES配置相同的用户密码启动查看 简介常规部署Elasticsearch集群时,不管是集群之间的数据传输,或者是Client访问Elasticsearch集群时均不需要相关验证,可通过对外提供的http接口,......
  • Bean Search 超级好用的搜索工具
    1、引入依赖<dependency><groupId>cn.zhxu</groupId><artifactId>bean-searcher-boot-starter</artifactId><version>4.1.2</version></dependency>2、定义实体类autoMapTo:若不指定别名,自动映射的表orderBy:排序字段,如果数据量大,不建......
  • elasticsearch核心知识篇1 索引curd mapping query
    1,索引的curdGET_search{"query":{"match_all":{}}}#创建indexPUT/product#查询GET/product/_search#新增数据1PUT/product/_doc/1{"name":"xiaomiphone","desc":"shoujihongdezhandouji&q......
  • 使用 Elasticsearch 的 REST API 来查询节点的内存使用情况
    curl-XGET'http://172.18.10.96:9200/_nodes/node-1/stats?pretty&human&filter_path=nodes.*.jvm.mem.heap_used_percent'{"nodes":{"WKECtNqYSuCKgHu-HNJTfg":{"jvm":{"mem":......
  • Uva--297 Quadtrees(非二叉树/四叉树)
    记录18:342023-5-20uva.onlinejudge.org/external/2/297.htmlreference:《算法竞赛入门经典第二版》例题6-11非二叉树,这还是比较有趣的,图形学上还有八叉树用来划分空间的。这道题将图和四叉巧妙的结合起来,其原理也是使用先序遍历,边读边建树#include<cstdio>#include<cstri......
  • elasticsearch 启动报错 SearchPhaseExecutionException[Failed to execute phase [qu
    Elasticsearch启动报错:[2023-05-19T22:39:32,161][DEBUG][o.e.a.s.TransportSearchAction][X-111.ecs]Allshardsfailedforphase:[query][2020-05-19T22:39:32,162][WARN][r.suppressed][X-111.ecs]path:/.kibana_task_manager/_search,params:{ign......