#define MaxSize 15
typedef struct BTNode{
char data;
struct BTNode* left;
struct BTNode* right;
int currentLevel;
}BTNode;
//BFS 模板代码
void BFS(BTNode* root){
BTNode* queue[MaxSize];
int front = 0,rear = 0;
BTNode* p;
if (root) {
rear = (rear + 1) % MaxSize;
queue[rear] = root;
while (front != rear) {
front = (front + 1) % MaxSize;
p = queue[front];
cout<<p->data<<"\n";
if (p->left) {
rear = (rear + 1) % MaxSize;
queue[rear] = p->left;
}
if (p->right) {
rear = (rear + 1) % MaxSize;
queue[rear] = p->right;
}
}
}
}
//层次遍历计算二叉树宽度
void Width(BTNode* root){
BTNode *queue[MaxSize];
int front = 0,rear = 0,level = 1;
BTNode *q;
if (root) {
++rear;
queue[rear] = root;
queue[rear]->currentLevel = level;
while (front != rear) {
++front;
q = queue[front];
level = queue[front]->currentLevel;
cout<<"level:"<<q->currentLevel<<" data:"<<q->data<<"\n";
if (q -> left) {
++rear;
queue[rear] = q -> left;
queue[rear]->currentLevel = level+1;
}
if (q -> right) {
++rear;
queue[rear] = q -> right;
queue[rear]->currentLevel = level+1;
}
}
}
int count; //计算当前层个数
int maxcount = 0; //计算最大宽度
for (int j = 1; j <= level; j++) {
count = 0;
for (int i = 0; i <= rear; ++i) {
if (queue[i] -> currentLevel == j) {
count++;
}
if (count > maxcount) {
maxcount = count;
}
}
}
cout<<"maxlevel:"<<maxcount<<"\n";
}
计算二叉树宽度(BFS)
最新推荐文章于 2022-12-03 17:45:00 发布