给定一个二叉搜索树,查找比指定target大的最小值&&查找比指定值target小的最大值
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
typedef struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
struct TreeNode(int x) :val(x), left(nullptr), right(nullptr) {}
struct TreeNode(int x, TreeNode *left, TreeNode *right) :val(x), left(left), right(right) {}
}*Tree;
int findBigger(Tree root, int target) {
if (root == nullptr) return 0;
if (root->val <= target) {
return findBigger(root->right, target);
}
else {
int node0val = findBigger(root->left, target);
return (node0val == 0) ? root->val : node0val;
}
}
int findsamllmax(Tree root, int target) {
if (root == nullptr) return 0;
if (root->val >= target) {
return findsamllmax(root->left, target);
}
else {
int node1val = findsamllmax(root->right, target);
return (node1val == 0) ? root->val : node1val;
}
}
int main() {
Tree root = new TreeNode(5);
Tree root1 = new TreeNode(4);
Tree root2 = new TreeNode(6);
Tree root3 = new TreeNode(3.5);
Tree root4 = new TreeNode(4.5);
Tree root5 = new TreeNode(5.5);
Tree root6 = new TreeNode(6.5);
root->left = root1;
root->right = root2;
root1->left = root3;
root1->right = root4;
root2->left = root5;
root2->right = root6;
int res1 = findBigger(root, 4.5);
cout << res1 << endl;
int res2 = findsamllmax(root, 5);
cout << res2 << endl;
system("pause");
return 0;
}