int findallcodenumber(bitree root) {
if (root == NULL)
return 0;
Queue q;
initqueue(q); // 初始化队列
enqueue(q, root); // 将根节点入队
int codenumber = 0;
while (!isempty(q)) {
bitree current;
dequeue(q, current);
codenumber++;
if (current->lchild != NULL)
enqueue(q, current->lchild); // 将左孩子入队
if (current->rchild != NULL)
enqueue(q, current->rchild); // 将右孩子入队
}
return codenumber;
}
完整代码
#include <iostream>
#include <queue>
using namespace std;
// 二叉树节点结构
struct TreeNode {
int data; // 节点数据
struct TreeNode* lchild; // 左子节点指针
struct TreeNode* rchild; // 右子节点指针
};
typedef struct TreeNode* bitree; // 定义二叉树指针类型
typedef queue<bitree> Queue; // 定义队列类型
void initqueue(Queue& q) {
while (!q.empty()) {
q.pop(); // 清空队列
}
}
void enqueue(Queue& q, bitree item) {
q.push(item); // 入队操作
}
void dequeue(Queue& q, bitree& item) {
item = q.front(); // 获取队头节点
q.pop(); // 出队操作
}
bool isempty(Queue& q) {
return q.empty(); // 判断队列是否为空
}
int findallcodenumber(bitree root) {
if (root == NULL)
return 0;
Queue q;
initqueue(q); // 初始化队列
enqueue(q, root); // 将根节点入队
int codenumber = 0;
while (!isempty(q)) {
bitree current;
dequeue(q, current);
codenumber++;
if (current->lchild != NULL)
enqueue(q, current->lchild); // 将左孩子入队
if (current->rchild != NULL)
enqueue(q, current->rchild); // 将右孩子入队
}
return codenumber;
}
bitree createNode(int data) {
bitree newNode = new TreeNode;
newNode->data = data;
newNode->lchild = NULL;
newNode->rchild = NULL;
return newNode;
}
bitree createBinaryTree() {
bitree root =createNode(1) ;
root->lchild = createNode(2);
root->rchild = createNode(3);
root->lchild->lchild = createNode(4);
root->lchild->rchild = createNode(5);
root->rchild->lchild = createNode(6);
root->rchild->rchild = createNode(7);
return root;
}
int main() {
bitree root = createBinaryTree();
int totalNodes = findallcodenumber(root);
cout << "二叉树中节点的总数为:" << totalNodes << endl;
return 0;
}