二叉树的深度与什么有关?

 我来答
源来终成王i
2023-01-03 · TA获得超过2103个赞
知道答主
回答量:94
采纳率:66%
帮助的人:5.1万
展开全部
  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]

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式