1099. Build A Binary Search Tree (30) 给定二叉搜索树插值
2016-03-07 19:19
302 查看
题目链接:<a target=_blank href="https://www.patest.cn/contests/pat-a-practise/1099" target="_blank">https://www.patest.cn/contests/pat-a-practise/1099</a>
#include <iostream> #include <string> #include <cstdio> #include <vector> #include <queue> #include <algorithm> #include <stack> using namespace std; struct Node { int number,leftNum,rightNum; Node *left,*right; Node():number(0),leftNum(0),rightNum(0),left(NULL),right(NULL){}; }; int calcLeftNodeNum(Node * T) { if(T==NULL) return 0; T->leftNum = calcLeftNodeNum(T->left); T->rightNum = calcLeftNodeNum(T->right); return T->leftNum + T->rightNum+1; } void setNum(Node *T,int start,vector<int> target){ if(T==NULL) return; T->number = target[start+T->leftNum]; setNum(T->left,start,target); setNum(T->right,start+T->leftNum+1,target); } int main() { int n,l,r; scanf("%d",&n); vector<Node*>BST; for (int i=0; i<n; ++i) { BST.push_back(new Node()); } for(int i=0; i<n; ++i) { scanf("%d %d",&l,&r); if(l!=-1) BST[i]->left = BST[l]; else BST[i]->left = NULL; if(r!=-1) BST[i]->right = BST[r]; else BST[i]->right = NULL; } vector<int>target(n); for (int i=0; i<n; ++i) scanf("%d",&target[i]); sort(target.begin(), target.end()); Node * root = BST[0]; calcLeftNodeNum(root); setNum(root,0,target); target.clear(); queue<Node *>q; if(root) q.push(root); while (!q.empty()) { Node * p = q.front(); q.pop(); target.push_back(p->number); if(p->left) q.push(p->left); if(p->right) q.push(p->right); } for(int i=0;i<n;++i) printf(i==n-1?"%d\n":"%d ",target[i]); return 0; }
相关文章推荐
- iOS开发------类似UI浏览器上方的滚动状态栏
- UIButton的contentEdgeInsets属性
- 为啥requests和urllib,urllib2,urllib3的URL编码行为存在这种差异?
- SoupUI Pro返回乱码
- 解决 PHP Interpreter is not configured Please configure PHP Interpreter to use built-in web server
- 关于order by注入利用rand(true)的一个疑问
- proxy-target-class="true" 与proxy-target-class="false"的区别
- 自定义导航栏按钮UIBarButtonItem 文字或图片(定制)
- UILabel的一些不常用属性,持续更新
- LeetCode 96. Unique Binary Search Trees
- 语言编程中返回false和true的易错点
- Java String、StringBuffer、StringBuilder比较
- UE4 学习笔记(一)--- TextBox 文本框用BluePrint做限制字符输入个数
- 1101. Quick Sort (25)
- Storyboard中的UIScrollView使用自动布局,使其能够滚动
- 使用GUI工具高效构建你自己的Nuget包
- 关于UISearchController的使用方法
- Java中break、continue、return语句的使用区别
- QuickFix/J (3):自定义字段
- 关于Webkit 控件dui化闪屏的解决