[华为机试练习题]42.求二叉树的深度和宽度

题目

题目标题:

求二叉树的宽度和深度
给定一个二叉树,获取该二叉树的宽度和深度。   

比如输入
   a
  / 
 b   c
/  / 
d e f g

返回3.

接口说明
原型:

     int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight)

输入參数:

     head   须要获取深度的二叉树头结点

输出參数(指针指向的内存区域保证有效):

     pulWidth   宽度
     pulHeight  高度

返回值:

     0          成功
     1          失败或其它异常

练习阶段:

中级 

代码

/*---------------------------------------
*   日期:2015-07-03
*   作者:SJF0115
*   题目:求二叉树的深度和宽度
*   来源:华为机试练习题
-----------------------------------------*/
#include <iostream>
#include "OJ.h"
#include <string>
#include <queue>
using namespace std;

/*
Description  
         给定一个二叉树,获取该二叉树的宽度深度。

Prototype int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight) Input Param head 须要获取深度的二叉树头结点 Output Param pulWidth 宽度 pulHeight 高度 Return Value 0 成功 1 失败或其它异常 */ int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight){ if(&head == NULL || pulWidth == NULL || pulHeight == NULL){ return 1; }//if int maxWidth = 0; int curWidth = 0; int height = 0; BiNode* root = &head; queue<BiNode*> curQueue; queue<BiNode*> nextQueue; curQueue.push(root); // 层次遍历 while(!curQueue.empty()){ ++height; curWidth = 0; while(!curQueue.empty()){ ++curWidth; BiNode* node = curQueue.front(); curQueue.pop(); // 左子结点不为空 if(node->left != NULL){ nextQueue.push(node->left); }//if // 右子节点不为空 if(node->right != NULL){ nextQueue.push(node->right); }//if }//while // 更新最大宽度 if(curWidth > maxWidth){ maxWidth = curWidth; }//if swap(curQueue,nextQueue); }//while *pulWidth = maxWidth; *pulHeight = height; return 0; }

原文地址:https://www.cnblogs.com/zsychanpin/p/7099435.html