二叉树的深度怎么算?

 我来答
源来终成王i
2023-01-06 · TA获得超过2103个赞
知道答主
回答量:94
采纳率:66%
帮助的人:4.8万
展开全部
  1. 一颗树只有一个节点,它的深度是1;

  2. 根节点只有左子树而没有右子树,那么二叉树的深度应该是其左子树的深度加1;

  3. 根节点只有右子树而没有左子树,那么二叉树的深度应该是其右树的深度加1;

  4. 根节点既有左子树又有右子树,那么二叉树的深度应该是其左右子树的深度较大值加1

二叉树的宽度算法如下:

  • 宽度的定义: 

二叉树的宽度定义为具有最多结点数的层中包含的结点数。

  • 求解思路: 

这里需要用到二叉树的层次遍历,即广度优先周游。在层次遍历的过程中,通过读取队列中保留的上一层的节点数来记录每层的节点数,以获取所有层中最大的节点数。

  • 具体实现:

//求二叉树的宽度  

int treeWidth(BinaryTreeNode *pRoot){  

if (pRoot == NULL)

return 0;  

int nLastLevelWidth = 0;//记录上一层的宽度  

int nCurLevelWidth = 0;//记录当前层的宽度  

queue<BinaryTreeNode*> myQueue;  

myQueue.push(pRoot);//将根节点入队列  

int nWidth = 1;//二叉树的宽度  

nLastLevelWidth = 1;      

BinaryTreeNode *pCur = NULL;  

while (!myQueue.empty())//队列不空  

{  

while (nLastLevelWidth!= 0){  

pCur = myQueue.front();//取出队列头元素  

myQueue.pop();//将队列头元素出对  

if (pCur->m_pLeft != NULL)  

myQueue.push(pCur->m_pLeft);   

if (pCur->m_pRight != NULL)  

myQueue.push(pCur->m_pRight); 

nLastLevelWidth--;  

}  

nCurLevelWidth = myQueue.size();  

nWidth = nCurLevelWidth > nWidth ? nCurLevelWidth : nWidth;  

nLastLevelWidth = nCurLevelWidth;  

}  

return nWidth;  

}

参考资料

二叉树的构造与遍历.csdn博客[引用时间2018-5-2]

光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式