求二叉树的宽度
1 /******************************************* 2 *思路:以二叉树的层次遍历为基础 3 *****************************************/ 4 #define MAX_DEEP 100 //假设二叉树的最大深度 5 int Width(BiTree t) 6 { 7 BiTree p; 8 int width = 0;//最大宽度 9 int level;//层次 10 int withTable[MAX_DEEP];//每层的宽度表 11 memset(withTable, 0, MAX_DEEP); 12 InitQueue(Q); 13 if (T != NULL) { 14 EnQueue(Q,T); 15 level = 1;//初始层次 16 withTable[level]++; 17 width = withTable[level];//初始宽度 18 } 19 while(!QueueEmpty(Q)) { 20 DeQueue(Q,p); 21 if (p->lchild != NULL) { 22 EnQueue(Q,p->lchild); 23 withTable[level+1]++;//当前结点的下一个层次节点数加一 24 } 25 if (p->rchild != NULL) { 26 EnQueue(Q,p->rchild); 27 withTable[level+1]++;//当前结点的下一个层次节点数加一 28 } 29 width = width > withTable[level+1] ? width : withTable[level+1];//获取最大层次 30 if (--withTable[level] == 0) level++;//核心步骤:当前层所有节点都已出队时,层次加一 31 } 32 return width; 33 }
!!!请勿转载到CSDN