二叉树的深度和宽度

来源:互联网 发布:mysql insert into 慢 编辑:程序博客网 时间:2024/06/04 14:28

二叉树的深度和宽度

在一个面试题看到的,题目要求是求一棵二叉树的面积。
二叉树面积=二叉树的高 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;  }   

运行结果:

这里写图片描述

0 0
原创粉丝点击