user-0 提问: 求算法

回复:
user: user-0
content: 引用 10 楼 真相重于对错 的回复：[quote=引用 9 楼 Stefan5042 的回复:] [quote=引用 7 楼 真相重于对错 的回复：]排序二叉树，最大值肯定是最右叶节点。 所以，就是查找X的左子树的最右叶节点哥，可以麻烦写一下吗？写个大概就行[/quote] 那我就拿上边的代码给你改一下。 binTree *searchMax(binTree *pos) { 	binTree * p = pos; 	while (p->rchild != NULL) 	{ 		p = p->rchild; 	} 	return p; }[/quote]这，我要是考试写，该写成什么样子呢

user: user-0
content: 引用 10 楼 真相重于对错 的回复：[quote=引用 9 楼 Stefan5042 的回复:] [quote=引用 7 楼 真相重于对错 的回复：]排序二叉树，最大值肯定是最右叶节点。 所以，就是查找X的左子树的最右叶节点哥，可以麻烦写一下吗？写个大概就行[/quote] 那我就拿上边的代码给你改一下。 binTree *searchMax(binTree *pos) { 	binTree * p = pos; 	while (p->rchild != NULL) 	{ 		p = p->rchild; 	} 	return p; }[/quote]这……我要是考试，该写成什么样呢？

user: user-1
content: 引用 9 楼 Stefan5042 的回复:[quote=引用 7 楼 真相重于对错 的回复：]排序二叉树，最大值肯定是最右叶节点。 所以，就是查找X的左子树的最右叶节点哥，可以麻烦写一下吗？写个大概就行[/quote] 那我就拿上边的代码给你改一下。 binTree *searchMax(binTree *pos) { 	binTree * p = pos; 	while (p->rchild != NULL) 	{ 		p = p->rchild; 	} 	return p; }

user: user-0
content: 引用 7 楼 真相重于对错 的回复：排序二叉树，最大值肯定是最右叶节点。 所以，就是查找X的左子树的最右叶节点哥，可以麻烦写一下吗？写个大概就行

user: user-1
content: 用递归去寻找，糟蹋了之前的排序。

user: user-1
content: 排序二叉树，最大值肯定是最右叶节点。 所以，就是查找X的左子树的最右叶节点

user: user-2
content: 看考试的基本要求，我刚刚的程序是在最一般的条件(没有找到x的位置的前提)下写的。你题目的要求是什么?元素x所在的结点的位置确定没有?

user: user-2
content: 顺便再给一个相关的代码：  二叉树排序树的建立： https://download.csdn.net/download/donald_shallwing/11925300

user: user-0
content: 引用 4 楼 Donald_Shallwing 的回复：[quote=引用 3 楼 Donald_Shallwing 的回复:]  class binTree{ public: 	char			element; 	binTree *lchild, *rchild; };  binTree *position(binTree *t, int x){ 	 	if(t){ 		if(t->element == x) 			return t->lchild; 		else{ 			position(t->lchild, x); 			position(t->rchild, x); 		} 	} }  binTree *searchMax(binTree *pos){ 	 	if(pos){ 		if(pos->rchild) 			searchMax(pos->rchild); 		else 			return pos; 	} 	else 		return NULL; }  int main(int argc, char **argv){ 	 	binTree *root = create(); 	int				x; 	cin >> x;  	cout << searchMax(position(root, x)) << endl; 	return 0; }    还没有测试，大致是这样，binTree是一个二叉链表的结点，两个函数进行嵌套调用，应该就可以实现了。 主要的思想就是： 先找到x的位置，然后再去寻找对应要求的结点。   position这个函数要注意一下，if(t)之后需要加一个else， 后面写return NULL;[/quote]超级感谢🙏

user: user-2
content: 引用 3 楼 Donald_Shallwing 的回复: class binTree{ public: 	char			element; 	binTree *lchild, *rchild; };  binTree *position(binTree *t, int x){ 	 	if(t){ 		if(t->element == x) 			return t->lchild; 		else{ 			position(t->lchild, x); 			position(t->rchild, x); 		} 	} }  binTree *searchMax(binTree *pos){ 	 	if(pos){ 		if(pos->rchild) 			searchMax(pos->rchild); 		else 			return pos; 	} 	else 		return NULL; }  int main(int argc, char **argv){ 	 	binTree *root = create(); 	int				x; 	cin >> x;  	cout << searchMax(position(root, x)) << endl; 	return 0; }    还没有测试，大致是这样，binTree是一个二叉链表的结点，两个函数进行嵌套调用，应该就可以实现了。 主要的思想就是： 先找到x的位置，然后再去寻找对应要求的结点。   position这个函数要注意一下，if(t)之后需要加一个else， 后面写return NULL;

user: user-2
content: class binTree{ public: 	char			element; 	binTree *lchild, *rchild; };  binTree *position(binTree *t, int x){ 	 	if(t){ 		if(t->element == x) 			return t->lchild; 		else{ 			position(t->lchild, x); 			position(t->rchild, x); 		} 	} }  binTree *searchMax(binTree *pos){ 	 	if(pos){ 		if(pos->rchild) 			searchMax(pos->rchild); 		else 			return pos; 	} 	else 		return NULL; }  int main(int argc, char **argv){ 	 	binTree *root = create(); 	int				x; 	cin >> x;  	cout << searchMax(position(root, x)) << endl; 	return 0; }    还没有测试，大致是这样，binTree是一个二叉链表的结点，两个函数进行嵌套调用，应该就可以实现了。 主要的思想就是： 先找到x的位置，然后再去寻找对应要求的结点。

user: user-0
content: 引用 1 楼 user-3 的回复：先遍历，找到所有小于x的值，再在这些值中找最大值。哥，可以劳烦写一下算法吗

user: user-3
content: 先遍历，找到所有小于x的值，再在这些值中找最大值。