题目描述
找二叉排序树中,结点值小于 x 且是所有小于 x 的结点中最大的结点。
其中,二叉排序树定义如下:
typedef struct BTNode {
int val;
struct BTNode *lchild;
struct BTNode *rchild;
} BSTNode, *BiTree;
例如找上图<35所构成列表中的最大值:34
算法思路
- 用
max
记录当前遍历到的比x
小的最大值,使用bt
遍历二叉排序树; - 在
bt->val >= x
的结点的左子树中查找;在bt->val < x
的结点的右子树中查找;直到该结点为叶子结点。
int FindMax(BiTree bt, int x) {
int max = INT_MIN;
while(bt != NULL) {
if(bt->val >= x)
bt = bt->lchild;
else {
max = bt->val;
bt = bt->rchild;
}
}
return max;
}
时空复杂度 O ( n ) O(n) O(n)