我有这样的结构
struct binTree{
long long data;
struct binTree *left;
struct binTree *right;
}
Run Code Online (Sandbox Code Playgroud)
和这样的功能:
void height(struct binTree **r)
{
...
...
height(&(r->left));
height(&(r->right));
...
...
}
Run Code Online (Sandbox Code Playgroud)
编译上面的函数给我这样的错误......
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*’
Run Code Online (Sandbox Code Playgroud)
代码有什么问题?如何传递结构中的指针?
你必须写
height( &( ( *r )->left ) );
height( &( ( *r )->right ) );
Run Code Online (Sandbox Code Playgroud)
或者更简单
height( &( *r )->left );
height( &( *r )->right );
Run Code Online (Sandbox Code Playgroud)
这里的运算符&和*一元运算符的优先级低于后缀运算符,包括运算符->
PS因为我认为这个函数不会改变对象binTree,所以你可以简化函数并简单地将参数声明为
const struct binTree *r
Run Code Online (Sandbox Code Playgroud)
或者如果它是C++程序那么
const binTree *r
Run Code Online (Sandbox Code Playgroud)
在这种情况下,函数中使用的语法结构会更简单.
只有我不明白为什么它有返回类型void.:)函数不应该返回二叉树的高度或高度在函数体内输出?如果函数返回高度会更好.在这种情况下,您可以比较两个二叉树的高度.