日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++学习之路 | PTA(甲级)—— 1099 Build A Binary Search Tree (30分)(带注释)(精简)

發布時間:2024/7/23 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++学习之路 | PTA(甲级)—— 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 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 ?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
關鍵思路:中序遍歷這棵樹得到的結點順序應該是給出的數值序列從小到大的排列順序

#include<iostream> #include<algorithm> #include<queue> #include<vector> using namespace std; const int maxn = 101; struct node {int id;//存儲節點編號int data;//存儲節點存儲的數據int left;//左孩子int right;//右孩子 }no[maxn]; int n; int k = 0; vector<int>v(maxn); void inorder(int root) {if (root == -1)return;//當該節點為-1,returninorder(no[root].left);no[root].data = v[k++];//中序遍歷的結果就是二叉搜索樹的從小到大排序inorder(no[root].right); } int main() {cin >> n;for (int i = 0; i < n; i++)//初始化{no[i].id = i;cin >> no[i].left;cin >> no[i].right;}for (int i = 0; i < n; i++)//存儲需要插入的數據{cin >> v[i];}sort(v.begin(), v.begin() + n);//排序inorder(0);//中序遍歷,0是根節點queue<int>q;int flag = 0;q.push(0);//根節點入隊while (!q.empty()){int fa = q.front();q.pop();if (flag++ == 0)cout << no[fa].data;else cout << " " << no[fa].data;//輸出格式if (no[fa].left != -1)q.push(no[fa].left);if (no[fa].right != -1)q.push(no[fa].right);}}

總結

以上是生活随笔為你收集整理的C++学习之路 | PTA(甲级)—— 1099 Build A Binary Search Tree (30分)(带注释)(精简)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。