提交时间:2024-01-23 22:05:18

运行 ID: 125726

#include <iostream> #include <vector> #include <queue> using namespace std; struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; void buildTree(vector<int>& nums, TreeNode*& root) { if (nums.empty()) { return; } priority_queue<int> pq; for (int num : nums) { pq.push(num); } while (!pq.empty()) { int val = pq.top(); pq.pop(); if (!root) { root = new TreeNode(val); } else { if (root->left == NULL && root->right == NULL) { if (val < root->val) { root->left = new TreeNode(val); } else { root->right = new TreeNode(val); } } else if (val < root->val) { root->left = buildTree(pq, root->left); } else { root->right = buildTree(pq, root->right); } } } } void preorderTraversal(TreeNode* root) { if (!root) { return; } cout << root->val << " "; preorderTraversal(root->left); preorderTraversal(root->right); } int main() { int n , x ; cin >> n ; vector <int> nums ; while ( n -- ) { cin >> x ; nums . push ( x ) ; } TreeNode* root = NULL; // 根节点指针,初始化为NULL。 buildTree(nums, root); // 构建二叉查找树。 preorderTraversal(root); // 调用前序遍历函数。 cout << endl; // 输出一个换行符。 return 0; // 程序正常退出。 }