Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用空函数计算二叉树的高度 我学习C++并尝试编写一个空格函数来计算节点的高度。函数必须为void类型,因此它不能返回任何内容,但应正确计算节点的高度。下面是我的代码: void computeHeight(Node *n) { if (!n->left && !n->right){ n->height = 0; } else if (n->left && !n->right){ n->height = 1 + computeHeight(n->left); } else if (!n->left && n->right){ n->height = 1 + computeHeight(n->right); } else { if (computeHeight(n->left) > computeHeight(n->right)){ n->height = 1 + computeHeight(n->left); } else { n->height = 1 + computeHeight(n->right); } } }_C++_Binary Tree - Fatal编程技术网

用空函数计算二叉树的高度 我学习C++并尝试编写一个空格函数来计算节点的高度。函数必须为void类型,因此它不能返回任何内容,但应正确计算节点的高度。下面是我的代码: void computeHeight(Node *n) { if (!n->left && !n->right){ n->height = 0; } else if (n->left && !n->right){ n->height = 1 + computeHeight(n->left); } else if (!n->left && n->right){ n->height = 1 + computeHeight(n->right); } else { if (computeHeight(n->left) > computeHeight(n->right)){ n->height = 1 + computeHeight(n->left); } else { n->height = 1 + computeHeight(n->right); } } }

用空函数计算二叉树的高度 我学习C++并尝试编写一个空格函数来计算节点的高度。函数必须为void类型,因此它不能返回任何内容,但应正确计算节点的高度。下面是我的代码: void computeHeight(Node *n) { if (!n->left && !n->right){ n->height = 0; } else if (n->left && !n->right){ n->height = 1 + computeHeight(n->left); } else if (!n->left && n->right){ n->height = 1 + computeHeight(n->right); } else { if (computeHeight(n->left) > computeHeight(n->right)){ n->height = 1 + computeHeight(n->left); } else { n->height = 1 + computeHeight(n->right); } } },c++,binary-tree,C++,Binary Tree,我想我会出错,因为它不喜欢void函数中的“+”之类的运算符。请告知 我假设不允许您更改函数返回类型(即使它强制执行了一个相当奇怪的实现) 您不能将1添加到computeHeight的结果中,因为后者根本不返回任何结果 然而,computeHeight做了一些事情。它有所谓的副作用。此效果是“在完成计算高度(n)后,n->height将被设置为给定节点的高度值(从叶子算起)”。您可以使用: else if (n->left && !n->right){ co

我想我会出错,因为它不喜欢void函数中的“+”之类的运算符。请告知

我假设不允许您更改函数返回类型(即使它强制执行了一个相当奇怪的实现)


您不能将
1
添加到
computeHeight
的结果中,因为后者根本不返回任何结果

然而,
computeHeight
做了一些事情。它有所谓的副作用。此效果是“在完成
计算高度(n)
后,
n->height
将被设置为给定节点的高度值(从叶子算起)”。您可以使用:

else if (n->left && !n->right){
    computeHeight(n->left);
    n->height = 1 + n->left->height;
}
在最后一种情况下,您需要首先计算两个子树的高度,然后比较副作用:

else {
  computeHeight(n->left);
  computeHeight(n->right);
  n->height = 1 + std::max(n->left->height, n->right->height); //slightly refactored ;)
}

我假设不允许您更改函数返回类型(即使它强制执行一个相当奇怪的实现)


您不能将
1
添加到
computeHeight
的结果中,因为后者根本不返回任何结果

然而,
computeHeight
做了一些事情。它有所谓的副作用。此效果是“在完成
计算高度(n)
后,
n->height
将被设置为给定节点的高度值(从叶子算起)”。您可以使用:

else if (n->left && !n->right){
    computeHeight(n->left);
    n->height = 1 + n->left->height;
}
在最后一种情况下,您需要首先计算两个子树的高度,然后比较副作用:

else {
  computeHeight(n->left);
  computeHeight(n->right);
  n->height = 1 + std::max(n->left->height, n->right->height); //slightly refactored ;)
}

您的代码可以按如下方式进行固定和简化(未经测试):


您的代码可以按如下方式进行固定和简化(未经测试):


1+计算高度(n->左)-您正在递归调用void类型的函数。因此,出现错误。将返回类型更改为
n->height
成员类型,并添加
return n->height在函数的末尾,我如何将它写为一个空函数?
1+computeHeight(n->left)-您正在递归调用void类型的函数。因此,出现错误。将返回类型更改为
n->height
成员类型,并添加
return n->height在函数末尾,如何将其作为void函数编写?