题解 | #二叉排序树#递归插入加递归遍历
二叉排序树
https://www.nowcoder.com/practice/b42cfd38923c4b72bde19b795e78bcb3
#include <iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode *left = nullptr, *right = nullptr;
TreeNode(int x) : val(x) {}
~TreeNode() {
if (left) {
delete left;
left = nullptr;
}
if (right) {
delete right;
right = nullptr;
}
}
};
TreeNode *insertBST(TreeNode *root, int x) {
if (root == nullptr) return new TreeNode(x);
if (x < root->val) root->left = insertBST(root->left, x);
else if (x > root->val) root->right = insertBST(root->right, x);//为了去重,不能直接写else
return root;
}
void preOrder(TreeNode *root) {
if (root == nullptr) return;
cout << root->val << ' ';
preOrder(root->left);
preOrder(root->right);
}
void inOrder(TreeNode *root) {
if (root == nullptr) return;
inOrder(root->left);
cout << root->val << ' ';
inOrder(root->right);
}
void postOrder(TreeNode *root) {
if (root == nullptr) return;
postOrder(root->left);
postOrder(root->right);
cout << root->val << ' ';
}
int main() {
int n;
while (cin >> n) {
TreeNode *root = nullptr;
while (n--) {
int x;
cin >> x;
root = insertBST(root, x);
}
preOrder(root);
cout << '\n';
inOrder(root);
cout << '\n';
postOrder(root);
cout << '\n';
delete root;
}
return 0;
}