二叉树的深度怎么算

如题所述

二叉树的深度计算,首先要判断节点,以下是计算二叉树的详细步骤:

1、一颗树只有一个节点,它的深度是1;

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

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

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

一棵深度为k,且有2^k-1个节点的二叉树,称为满二叉树。这种树的特点是每一层上的节点数都是最大节点数。而在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点,则此二叉树为完全二叉树

具有n个节点的完全二叉树的深度为floor(log2n)+1。深度为k的完全二叉树,至少有2k-1个叶子节点,至多有2k-1个节点。

扩展资料

二叉树深度的性质:

1、在非空二叉树中,第i层的结点总数不超过, i>=1;

2、深度为h的二叉树最多有个结点(h>=1),最少有h个结点;

3、对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;

4、具有n个结点的完全二叉树的深度为

5、有N个结点的完全二叉树各结点如果用顺序方式存储,则结点之间有如下关系:

若I为结点编号则 如果I>1,则其父结点的编号为I/2;

如果2*I<=N,则其左孩子(即左子树的根结点)的编号为2*I;若2*I>N,则无左孩子;

参考资料:百度百科—二叉树

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2019-08-30

    一颗树只有一个节点,它的深度是1;

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

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

    根节点既有左子树又有右子树,那么二叉树的深度应该是其左右子树的深度较大值加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]

本回答被网友采纳
第2个回答  2014-09-14
深度为m的满二叉树有2^m-1个结点;

具有n个结点的完全二叉树的深度为[log2n]+1.(log2n是以2为底n的对数

希望对你有帮助!
第3个回答  2014-09-12

先遍历二叉树的左子树的深度,然后再遍历二叉树右子树的深度。最后判断左子树和右子树的深度,如果左子树比右子树深则返回左子树深度+1,否则返回右子树深度+1。

算法如下:

/* 初始条件: 二叉树T存在。操作结果: 返回T的深度 */
int BiTreeDepth(BiTree T)
{
 int i,j;
    if(!T)
  return 0;
 if(T->lchild)
  i=BiTreeDepth(T->lchild); //左子树深度
 else
  i=0;
 if(T->rchild)
  j=BiTreeDepth(T->rchild);  //右子树深度
 else
  j=0;
 return i>j?i+1:j+1;
}

第4个回答  2021-01-01

什么叫二叉树的度?带你了解它的特点

二叉树的深度计算方法
1、一颗树只有一个节点,它的深度是1;2、二叉树的根节点只有左子树而没有右子树,那么可以判断,二叉树的深度应该是其左子树的深度加1;3、二叉树的根节点只有右子树而没有左子树,那么可以判断,那么二叉树的深度应该是其右树的深度加1;4、二叉树的根节点既有右子树又有左子树,那么可以判断,...

二叉树的深度是什么?
1、一颗树只有一个节点,它的深度是1;2、二叉树的根节点只有左子树而没有右子树,那么可以判断,二叉树的深度应该是其左子树的深度加1;3、二叉树的根节点只有右子树而没有左子树,那么可以判断,那么二叉树的深度应该是其右树的深度加1;4、二叉树的根节点既有右子树又有左子树,那么可以判断,...

二叉树的性质有些啊?怎么求它的深度?
二叉树性质如下:1 :在二叉树的第i层上至少有2^(i-1)个结点 2:深度为k的二叉树至多有2^(k-1)个结点 3:对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1 4:具有n个结点的完全二叉树的深度是【log2n】+1(向下取整)5:如果对一棵有n个结点的完全二叉树...

二叉树的深度是多少?
1、一颗树只有一个节点,它的深度是1;2、二叉树的根节点只有左子树而没有右子树,那么可以判断,二叉树的深度应该是其左子树的深度加1;3、二叉树的根节点只有右子树而没有左子树,那么可以判断,那么二叉树的深度应该是其右树的深度加1;4、二叉树的根节点既有右子树又有左子树,那么可以判断,...

求助大神,二叉树的深度怎么算
根据二叉树的公式 n0 = n2 + 1(n0表示叶子结点,n2表示度为2的结点),叶子结点比度为2的结点个数多1,所以度为2的结点数 = 2,总共7个,所以度为1的点个数是2。n0 = 3 n1 = 2 n3 = 2 另外,3层的满二叉树正好7个结点,如下形式 O \/ \\ O O \/ \\ \/ \\ O ...

二叉树的深度怎么算
计算二叉树的深度,其实是一个递归的过程,简单明了。首先,如果树仅有一个节点,其深度即为1。接着,根据节点的结构,深度的计算有以下几种情况:如果根节点只有左子树,深度等于左子树的深度加1; 如果根节点只有右子树,深度等于右子树的深度加1; 如果根节点同时有左右子树,深度则是左右子树...

如何求一个二叉树的最大深度?
n1,n2,都可以求。完全二叉树的性质:具有n个结点的完全二叉树的深度为logn+1。如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i,有:如果i=1,则结点i是二叉树的根节点,无双亲;如果i>1,则其双亲是结点⌊i\/2⌋。如果2i>n,则结点i无左孩子;否则其左孩子...

二叉树的深度
二叉树有个性质:叶子节点的个数比度数为2的节点多1.本题中:叶子节点只有一个.说明该二叉树没有读书为2的节点 所以其余的6个节点全是度数为1.所以这个二叉树就相当于是一条直线 没有分叉。所以其深度为其节点

二叉树深度的问题
进一步地,我们可以发现左右子树的深度也是基于相同原则进行定义的。这形成了一种递归关系,使得整个二叉树的深度可以通过递归的方式逐步计算得出。一般而言,二叉树的深度被定义为从根节点到最远叶子节点路径上的节点总数。这种定义方式更为直观且实用,因为它强调了二叉树深度与树中节点分布的关系。在任何...

二叉树的深度怎么算?
一颗树只有一个节点,它的深度是1;根节点只有左子树而没有右子树,那么二叉树的深度应该是其左子树的深度加1;根节点只有右子树而没有左子树,那么二叉树的深度应该是其右树的深度加1;根节点既有左子树又有右子树,那么二叉树的深度应该是其左右子树的深度较大值加1 二叉树的宽度算法如下:宽度的...

相似回答