PAT-Build A Binary Search Tree
来源:互联网 发布:win查看端口占用 编辑:程序博客网 时间:2024/06/03 23:49
- 原题链接:Build A Binary Search Tree
- 题目大意:给你一个数组,让你将其按照指定的二叉搜索树的结构排序,最后输出这颗二叉搜索树的层次序遍历结果。
- 解法:原以为还需要我们自己手写二叉搜索树的构建,最后才发现不用,我们只要将这个数组排好序,再对号入座到响应的位置,然后输出遍历结果就好。那我们怎么找到相应的位置呢?
- 我们可以找到二叉树中每个节点对应的value值,怎么找呢?
- 我们知道二叉搜索树有下面的性质:右边的点的值都小于它,左边的值都大于它。
- 所以我们只要就确定右边该节点在中序遍历中属于第几个就可以了。因为对二叉搜索树进行中序遍历就是一个有序的序列。
- 假设已经排好序的数组是sorted,该节点在中序遍历中属于第i个,则该节点对应的值就是sorted[i]
- 分析到这里,我们其实就把问题更抽象一步如下:给你一个有序的数列和一颗二叉树的结构,输出这颗二叉搜索树的层次序遍历结果。或者是给定一颗二叉搜索树的结果和中序遍历的结果,输出这颗二叉树的层次序遍历结果。
- 代码如下:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;const int max_n = 105;int lchild[max_n];int rchild[max_n];int parent[max_n];int value[max_n];void init(){ for(int i=0;i<max_n;i++) { lchild[i] = rchild[i] = parent[i] = -1; }}void display(int root){ queue<int> q; q.push(root); while(!q.empty()) { int cur_root = q.front(); q.pop(); int lindex = lchild[cur_root]; int rindex = rchild[cur_root]; if(lindex != -1) { q.push(lindex); } if(rindex != -1) { q.push(rindex); } if(q.empty()) cout<<value[cur_root]; else cout<<value[cur_root]<<" "; }}int calu_lchild_num(int root){ int res = 0; if(root == -1) return res; res += 1; int lindex = lchild[root]; int rindex = rchild[root]; res += calu_lchild_num(lindex); res += calu_lchild_num(rindex); return res;}void update_value(int root, const int* sort_value, int start){ if(root == -1) { return ; } int index = calu_lchild_num(lchild[root]); value[root] = sort_value[index + start]; // cout<<"root is "<<root<<" lchild number is "<< index+start <<" value is "<<value[root]<<endl; int lindex = lchild[root]; int rindex = rchild[root]; update_value(lindex, sort_value, start); update_value(rindex, sort_value, start + index + 1);}int main(){ init(); freopen("/home/give/PAT/BuildABinarySearchTree.txt", "r", stdin); int n; cin>>n; for(int i=0;i<n;i++) { cin>>lchild[i]>>rchild[i]; parent[lchild[i]] = i; parent[rchild[i]] = i; } int copy_value[max_n]; for(int i=0;i<n;i++) { cin>>value[i]; copy_value[i] = value[i]; } sort(copy_value, copy_value+n); //build_BST(0); update_value(0, copy_value, 0); display(0); return 0;}
阅读全文
0 0
- PAT 1099. Build A Binary Search Tree
- pat 1099 Build A Binary Search Tree
- PAT|1099. Build A Binary Search Tree
- PAT--1099. Build A Binary Search Tree
- 【PAT】1099. Build A Binary Search Tree
- PAT Build A Binary Search Tree
- PAT 1099 Build A Binary Search Tree
- PAT-Build A Binary Search Tree
- PAT A 1099. Build A Binary Search Tree (30)
- PAT-A 1099. Build A Binary Search Tree
- PAT(A) - 1099. Build A Binary Search Tree (30)
- PAT(A)-1099. Build A Binary Search Tree (30)
- PAT-A-1099. Build A Binary Search Tree (30)
- PAT 1099. Build A Binary Search Tree (30)
- PAT 1099. Build A Binary Search Tree (30)
- pat 1099. Build A Binary Search Tree (30)
- PAT 1099. Build A Binary Search Tree (30)
- 【PAT】1099. Build A Binary Search Tree (30)
- 全排列问题与n皇后问题
- 创建单链表并赋值,要求遍历能输出1~9
- Spring4 bean 关系
- Sqoop1 安装及Hive/Hbase数据与Mysql数据互导(九)
- nyoj 456 邮票分你一半
- PAT-Build A Binary Search Tree
- 《Android Studio 中的java文件出现“R”爆红怎么办?》
- java二维数组A.length和A[i].length的区别
- Hpu-1412QAQ & 君临天下 || 天行九歌 【区间】[多校联萌]
- Struts2学习笔记
- JSP
- Unity中用自己做的方块(非标准cube)构建菱形地面
- mysql 结构优化
- Frogger POJ