二叉搜索树(又:二叉搜索树,二叉排序树)它可以是一棵空树。
二叉搜索树性质
-
结点的左子树只包含小于当前结点的数。
-
结点的右子树只包含大于当前结点的数。
-
所有左子树和右子树自身必须也是二叉搜索树。
例题: 查找二叉搜索树的第K小的元素
思路: 二叉搜索树的中序遍历就是有序的数组, 参考之前的遍历代码。
题解:
void inorderKthSmallest(TreeNode* root,int &res,int &k) {
if (root == nullptr){
return;
}
inorderKthSmallest(root->left,res, k);
if (k <= 0) {
return;
}
res = root->val;
k--; //找到第K个最小返回
inorderKthSmallest(root->right,res, k);
}
int main()
{
Solution solution;
TreeNode treeNode1(1);
TreeNode treeNode2(2);
TreeNode treeNode3(3);
TreeNode treeNode4(4);
treeNode3.right = &treeNode4;
treeNode3.left = &treeNode1;
treeNode1.right = &treeNode2;
int res;
int k = 1;
solution.inorderKthSmallest(&treeNode3,res,k);
cout<<res<<endl;
}