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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PAT甲级——1099 Build A Binary Search Tree (二叉搜索树)

發布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PAT甲级——1099 Build A Binary Search Tree (二叉搜索树) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文同步發布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90701125

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.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer?N?(≤) 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???will represent the NULL child pointer. Finally?Ndistinct 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

題目大意:將N個數放入一棵定型了的二叉樹,使其滿足二叉搜索樹的性質。

思路:先將數據Data排好序,二叉樹中存放數據的下標就行。

對于BST中的每個節點,它的key值對應的下標 index = 其上層節點傳遞過來的 M - 其右子樹節點的個數 rightNum。若當前節點是其parent節點的左孩子,這個傳遞過來的M值就是parent節點的下標;若當前節點是parent節點的右孩子,那么M就是其parent節點的M。根節點的M值為N-1。

1 #include <iostream> 2 #include <vector> 3 #include <queue> 4 #include <algorithm> 5 using namespace std; 6 struct node { 7 int left, right, 8 rightNum, 9 index; 10 }; 11 vector <node> tree; 12 vector <int> Data; 13 int getNum(int t); 14 void getIndex(int t, int M); 15 void levelOrder(int t); 16 int main() 17 { 18 int N; 19 scanf("%d", &N); 20 tree.resize(N); 21 for (int i = 0; i < N; i++) 22 scanf("%d%d", &tree[i].left, &tree[i].right); 23 Data.resize(N); 24 for (int i = 0; i < N; i++) 25 scanf("%d", &Data[i]); 26 sort(Data.begin(), Data.end()); 27 getIndex(0, N - 1); 28 levelOrder(0); 29 return 0; 30 } 31 void levelOrder(int t) { 32 queue <int> Q; 33 Q.push(t); 34 while (!Q.empty()) { 35 t = Q.front(); 36 Q.pop(); 37 printf("%d", Data[tree[t].index]); 38 if (tree[t].left != -1) 39 Q.push(tree[t].left); 40 if (tree[t].right != -1) 41 Q.push(tree[t].right); 42 if (!Q.empty()) 43 printf(" "); 44 } 45 } 46 void getIndex(int t, int M) { 47 if (t == -1) { 48 return; 49 } 50 tree[t].rightNum = getNum(tree[t].right); 51 tree[t].index = M - tree[t].rightNum; 52 getIndex(tree[t].left, tree[t].index - 1); 53 getIndex(tree[t].right, M); 54 } 55 int getNum(int t) { 56 if (t == -1) 57 return 0; 58 return getNum(tree[t].left) + getNum(tree[t].right) + 1; 59 }

?

轉載于:https://www.cnblogs.com/yinhao-ing/p/10950988.html

總結

以上是生活随笔為你收集整理的PAT甲级——1099 Build A Binary Search Tree (二叉搜索树)的全部內容,希望文章能夠幫你解決所遇到的問題。

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