解法:
二叉排序树(Binary Search Tree,简称BST)也被称为二叉搜索树或二叉查找树,是一种重要的二叉树结构,它具有以下性质:
- 左子树上所有节点的值都小于根节点的值;
- 右子树上所有节点的值都大于根节点的值;
- 左右子树也分别为二叉排序树。
根据这些性质,可以通过递归的方法来建立二叉排序树。具体步骤如下:
- 若二叉排序树为空树,则直接将当前节点作为根节点;
- 若当前节点的值小于根节点的值,则将当前节点插入到左子树中;
- 若当前节点的值大于根节点的值,则将当前节点插入到右子树中;
- 递归重复以上步骤,直到所有节点都插入到正确的位置上。
#include<iostream>
using namespace std;
struct treeNode {
int val;
treeNode* left;
treeNode* right;
treeNode(int x) :val(x), left(NULL), right(NULL) {};
};
treeNode* insertNode(treeNode* root, int x) {
if (root == NULL) return new treeNode(x);
if (x > root->val) {
root->right = insertNode(root->right, x);
}
else {
root->left = insertNode(root->left, x);
}
return root;
}
treeNode* buildtree() {
int n, a;
cin >> n;
cin >> a; n--;
treeNode* root = new treeNode(a);
while (n--) {
cin >> a;
root = insertNode(root, a);
}
return root;
}
void search(treeNode* root) {
int x;
cin >> x;
int cnt = 0;
while (root != NULL) {
cnt++;
if (x > root->val) {
root = root -> right;
}
else if (x<root->val) {
root = root->left;
}
else {
cout << cnt;
return;
}
}
cout << -1;
}
int main() {
treeNode* root = buildtree();
search(root);
return 0;
}
解答一下插入节点