Description
The maximum number of nodes in all levels in a binary tree is called the width of the tree. For example, the binary tree on the right in the following figure has width 4 because the maximum number of nodes is 4 on the third level. Implement the following function that computes the width of a binary tree.
typedef int T;
struct treeNode {
T data;
struct treeNode *left, *right;
treeNode(T d, treeNode *l=NULL, treeNode *r=NULL):data(d),left(l),right(r){};
};
int width(const treeNode * root);
// return the width of the binary tree root.
求二叉树的最大宽度,可用层次遍历二叉树,在遍历完一层后加上一个标志结点,通过标志结点来计算该层的宽度。
#include <iostream>
#include <queue>
using namespace std;
typedef int T;
struct treeNode {
T data;
struct treeNode *left, *right;
treeNode(T d, treeNode *l=NULL, treeNode *r=NULL):data(d),left(l),right(r){};
};
int width(const treeNode* root) {
if (root == NULL) {
return 0;
}
else {
int max = 1;
queue<const treeNode* > q;
q.push(root);
const treeNode* a = new treeNode(1, NULL, NULL); //标志结点
q.push(a);
while (!q.empty()) { //可以是while (1)
root = q.front();
q.pop();
if (q.size() == 0) break; //用于跳出循环
if (root == a) {
q.push(a); //继续将标志结点push进队列,则此时队列中除标志结点均为同层的结点,该层的宽度为size-1
if (q.size() - 1 > max) {
max = q.size() - 1;
}
}
else {
if (root->left != NULL) {
q.push(root->left);
}
if (root->right != NULL) {
q.push(root->right);
}
}
}
return max;
}
}