在二叉排序树中,找所有结点值小于 x 中的最大结点

    技术2025-12-15  28

    题目描述

    找二叉排序树中,结点值小于 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)

    Processed: 0.063, SQL: 12