以下是实现计算二叉树的最大宽度和求二叉树节点数目的示例代码:
template <class DataType>
int BinaryTree<DataType>::maxWidth(BTNode<DataType>* node) {
if (node == nullptr) {
return 0;
}
int maxWidth = 0;
queue<BTNode<DataType>*> q;
q.push(node);
while (!q.empty()) {
int levelSize = q.size(); // 当前层的节点个数
maxWidth = max(maxWidth, levelSize); // 更新最大宽度
for (int i = 0; i < levelSize; i++) {
BTNode<DataType>* currNode = q.front();
q.pop();
if (currNode->lChild != nullptr) {
q.push(currNode->lChild);
}
if (currNode->rChild != nullptr) {
q.push(currNode->rChild);
}
}
}
return maxWidth;
}
template <class DataType>
int BinaryTree<DataType>::countNodes(BTNode<DataType>* node) {
if (node == nullptr) {
return 0;
}
int leftCount = countNodes(node->lChild);
int rightCount = countNodes(node->rChild);
return leftCount + rightCount + 1; // 加上当前节点本身
}
使用方式:
BinaryTree<char> binaryTree;
binaryTree.CreateBinaryTree();
// 计算二叉树的最大宽度
int maxWidth = binaryTree.maxWidth(binaryTree.getRoot());
// 求二叉树的节点数目
int nodeCount = binaryTree.countNodes(binaryTree.getRoot());
请注意,上述代码是根据给定的二叉树结构进行的示例实现,您可能需要根据自己的实际情况进行适当修改。
内容由零声教学AI助手提供,问题来源于学员提问




