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

算法 专栏收录该内容
6 篇文章 0 订阅

题目描述

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

  • 9
    点赞
  • 7
    评论
  • 6
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值