void inorder(struct btnode *t)
{
if (root == NULL)
{
printf("No elements in a tree to display");
return;
}
max=t->value;
if (t->l != NULL)
{
inorder(t->l);
if(max<t->value)
{
max=t->value;
}
}
if (t->r != NULL)
{
inorder(t->l);
if(max<t->value)
{
max=t->value;
}
}
printf("max=%d\n",max);
}
我正在尝试实现inorder遍历以查找二叉树中的最大元素。我写的代码似乎没有返回结果。顺便说一句,我使用的max变量被声明为全局变量并初始化为零。谁能告诉我这里哪里出错了?先谢谢你!
答案 0 :(得分:3)
max=t->value;
设置没有条件的值。 @David van rijn
void inorder(const struct btnode *t) {
if (root == NULL) {
printf("No elements in a tree to display");
return;
}
if(max<t->value) { // Add test
max=t->value;
}
if (t->l != NULL) {
inorder(t->l);
}
if (t->r != NULL) {
// inorder(t->l); Wrong leaf.
inorder(t->r);
}
// Best to print from calling routine
// printf("max=%d\n",max);
}
void foo(const struct btnode *t) {
max = INT_MIN; // Set to minimum `int` value.
inorder(t);
printf("max=%d\n",max);
}
OP提到代码崩溃了。当然这是因为在if (t->r != NULL) { inorder(t->l);
和t->l
NULL
遍历了错误的叶子。{/ p>