用空函数计算二叉树的高度 我学习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); } } }
我想我会出错,因为它不喜欢void函数中的“+”之类的运算符。请告知 我假设不允许您更改函数返回类型(即使它强制执行了一个相当奇怪的实现)用空函数计算二叉树的高度 我学习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
您不能将
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函数编写?