我有这样的结构
struct binTree{
long long data;
struct binTree *left;
struct binTree *right;
}
这样的功能:
void height(struct binTree **r)
{
...
...
height(&(r->left));
height(&(r->right));
...
...
}
编译上面的函数给出了这样的错误......
error: request for member ‘left’ in ‘* r’, which is of non-class type ‘binTree*’
error: request for member ‘right’ in ‘* r’, which is of non-class type ‘binTree*’
代码有什么问题?如何传递结构中的指针?
答案 0 :(得分:6)
你必须写
height( &( ( *r )->left ) );
height( &( ( *r )->right ) );
或更简单
height( &( *r )->left );
height( &( *r )->right );
此处运算符&
和*
是一元运算符,其优先级低于后缀运算符,包括运算符->
P.S。由于我认为此函数不会更改对象binTree,因此您可以简化函数并将参数简单地声明为
const struct binTree *r
或者如果它是C ++程序那么
const binTree *r
在这种情况下,函数中使用的语法结构会更简单。
只有我不明白它为什么返回类型为void。:)函数是否应该返回二叉树的高度或高度在函数体内输出?如果函数返回高度会更好。在这种情况下,您可以比较两个二叉树的高度。
答案 1 :(得分:1)
这是一个更清晰的语法:
void height(struct binTree **r)
{
struct binTree* pr = *r;
height( &pr->right );
height( &pr->left );
}