二叉树的深度和宽度

二叉树的深度和宽度

在一个面试题看到的,题目要求是求一棵二叉树的面积。
二叉树面积=二叉树的高 X 二叉树的宽
下面我分别给出求二叉树高度和宽度的函数,这样二叉树的面积就迎刃而解了

CPP:

#include <iostream>  
#include <queue>  
using namespace std;  
struct BTNode  
{  
 char m_value;  
 BTNode *m_left;  
 BTNode *m_right;  
};  
//先序创建二叉树  
void CreatBTree(BTNode *&root)  
{    
 char nValue = 0;  
 cin >> nValue;  
 if ('#' == nValue)  
 {  
  return;  
 }  
 else  
 {  
  root = new BTNode();  
  root->m_value = nValue;  
  CreatBTree(root->m_left);  
  CreatBTree(root->m_right);  
 }    
}  
//求二叉树的深度  
int GetDepth(BTNode *pRoot)  
{  
 if (pRoot == NULL)  
 {  
  return 0;  
 }   
 return GetDepth(pRoot->m_left) > GetDepth(pRoot->m_right) ?  
  (GetDepth(pRoot->m_left) + 1) : (GetDepth(pRoot->m_right) + 1);  
}  
//求二叉树的宽度  
int GetWidth(BTNode *pRoot)  
{  
 if (pRoot == NULL)  
 {  
  return 0;  
 }  
 int nCurLevelWidth = 0;//记录当前层的宽度  
 int nWidth = 1;//二叉树的宽度  
 queue<BTNode *> myQueue;  
 myQueue.push(pRoot);//将根节点入队列  
 nCurLevelWidth = 1;      
 BTNode *pCur = NULL;  
 while (!myQueue.empty())//队列不空  
 {  
  while (nCurLevelWidth != 0)  
  {  
   pCur = myQueue.front();//取出队列头元素  
   myQueue.pop();//将队列头元素出对  
   if (pCur->m_left != NULL)  
   {  
    myQueue.push(pCur->m_left);  
   }  
   if (pCur->m_right != NULL)  
   {  
    myQueue.push(pCur->m_right);  
   }  
   nCurLevelWidth--;  
  }  
  nCurLevelWidth = myQueue.size();  
  nWidth = nCurLevelWidth > nWidth ? nCurLevelWidth : nWidth;  
 }  
 return nWidth;
}
int main(int argc, char** argv)  
{  
 BTNode *pRoot = NULL;    
 CreatBTree(pRoot);  
 cout << "二叉树的深度为:" << GetDepth(pRoot) << endl;  
 cout << "二叉树的宽度为:" << GetWidth(pRoot) << endl;      
 system("pause");  
 return 0;  
}   

运行结果:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值