1099. Build A Binary Search Tree (30)

来源:互联网 发布:中国历年gdp数据和排名 编辑:程序博客网 时间:2024/05/07 19:30

1.这道题目难度不大,主要思想如下:

1)先构建二叉树(此时尚未填值)

2)输出二叉树的中序遍历地址

3)对数组进行排序

4)把数组的数输入到中序遍历地址相应的节点值中


AC代码:

//#include<string>//#include <iomanip>#include<vector>#include <algorithm>//#include<stack>#include<set>#include<queue>#include<map>//#include<unordered_set>#include<unordered_map>//#include <sstream>//#include "func.h"//#include <list>#include<stdio.h>#include<iostream>#include<string>#include<memory.h>#include<limits.h>using namespace std;struct TreeNode{int val;TreeNode*left, *right;TreeNode(int x) :val(x), left(NULL), right(NULL){};TreeNode() :val(-1), left(NULL), right(NULL){};};void inOrder(TreeNode*root,vector<TreeNode*>&in){if (root != NULL){inOrder(root->left, in);in.push_back(root);inOrder(root->right, in);}}int main(void){int n;cin >> n;if (n == 0) return 0;TreeNode *tree = new TreeNode[n];//建立二叉树for (int i = 0; i < n; i++){int a, b;scanf("%d %d", &a, &b);if (a != -1)tree[i].left = &tree[a];if (b != -1)tree[i].right = &tree[b];}//读取数组vector<int> num(n, 0);for (int i = 0; i < n; i++){scanf("%d", &num[i]);}//数组排序sort(num.begin(), num.end());//建立中序遍历数组vector<TreeNode*> treeAddress(0);inOrder(&tree[0], treeAddress);for (int i = 0; i < n; i++){treeAddress[i]->val = num[i];}//进行层序遍历queue<TreeNode*> q;int count1 = 0;int count2 = 0;if (num.size() != 0){q.push(&tree[0]);count1++;}vector<int> outPut(0);while (!q.empty()){for (int i = 0; i < count1; i++){TreeNode* tmp = q.front(); q.pop();outPut.push_back(tmp->val);if (tmp->left != NULL){q.push(tmp->left);count2++;}if (tmp->right != NULL){q.push(tmp->right);count2++;}}count1 = count2;count2 = 0;}//输出结果for (int i = 0; i < outPut.size(); i++){cout << outPut[i];if (i != outPut.size() - 1)cout << " ";}cout << endl;return 0;}


0 0
原创粉丝点击