二叉树的深度是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的深度是啥?相关的知识,希望对你有一定的参考价值。

参考技术A C语言二叉树的深度指什么?怎么求?
从根节点到叶子结点一次经过的结点形成树的一条路径,最长路径的长度为树的深度。根节点的深度为1。

解体思路:

1.如果根节点为空,则深度为0,返回0,递归的出口。

2.如果根节点不为空,那么深度至少为1,然后我们求他们左右子树的深度,

3.比较左右子树深度值,返回较大的那一个

4.通过递归调用

#include #include using namespace std;struct BinaryTreeNode int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;;创建二叉树结点BinaryTreeNode* CreateBinaryTreeNode(int value) BinaryTreeNode* pNode=new BinaryTreeNode(); pNode->m_nValue=value; pNode->m_pLeft=NULL; pNode->m_pRight=NULL; return pNode;连接二叉树结点void ConnectTreeNodes(BinaryTreeNode* pParent,BinaryTreeNode* pLeft,BinaryTreeNode* pRight) if(pParent!=NULL) pParent->m_pLeft=pLeft; pParent->m_pRight=pRight; 求二叉树深度int TreeDepth(BinaryTreeNode* pRoot)计算二叉树深度 if(pRoot==NULL)如果pRoot为NULL,则深度为0,这也是递归的返回条件 return 0; 如果pRoot不为NULL,那么深度至少为1,所以left和right=1 int left=1; int right=1; left+=TreeDepth(pRoot->m_pLeft);求出左子树的深度 right+=TreeDepth(pRoot->m_pRight);求出右子树深度 return left>right?left:right;返回深度较大的那一个void main() 1 / \ 2 3 /\ \ 4 5 6 / 7 创建树结点 BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1); BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2); BinaryTreeNode* pNod......
二叉树的深度怎么算
先遍历二叉树的左子树的深度,然后再遍历二叉树右子树的深度。最后判断左子树和右子树的深度,如果左子树比右子树深则返回左子树深度+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;
二叉树的深度怎么算
深度为m的满二叉树有2^m-1个结点;

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



希望对你有帮助!
二叉树的性质有些啊?怎么求它的深度?
二叉树性质

性质1 :在二叉树的第i层上至少有2^(i-1)个结点

性质2:深度为k的二叉树至多有2^(k-1)个结点

性质3:对任何一棵二叉树T,如果其终端结罚数为n0,度为2的结点数为n2,则n0=n2+1

性质4:具有n个结点的完全二叉树的深度是【log2n】+1(向下取整)

性质5:如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i(1in),有:

如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是i/2

如果2i>n,则结点i无左孩子;如果2in,则其左孩子是2i

如果2i+1>n,则结点i无右孩子;如果2i+1n,则其右孩子是2i+1

还希望采纳
求教,树的二叉树的高度与深度一样吗?
引自考研大纲解析38页:树的深度是从根节点开始(其深度为1)自顶向下逐层累加的,而高度是从叶节点开始(其高度为1)自底向上逐层累加的。虽然树的深度和高度一样,但是具体到树的某个节点,其深度和高度是不一样的。我的理解是:非根非叶结点的深度是从根节点数到它的,高度是从叶节点数到它的。
vb中 二叉树的度 结点 深度之间有什么关系
详见:zhidao.baidu/...me_tag
二叉树根节点的深度是0还是1?
根结点如果不为空,深度为1,如果跟结点为空,则深度是0.

求二叉树深度

int TreeDepth(BinaryTreeNode* pRoot)计算二叉树深度



if(pRoot==NULL)如果pRoot为NULL,则深度为0,这也是递归的返回条件

return 0;

如果pRoot不为NULL,那么深度至少为1,所以left和right=1

int left=1;

int right=1;

left+=TreeDepth(pRoot->m_pLeft);求出左子树的深度

right+=TreeDepth(pRoot->m_pRight);求出右子树深度

return left>right?left:right;返回深度较大的那一个


二叉树的深度就是高度吗
树的深度是从根节点开始(其深度为1)自顶向下逐层累加的,而高度是从叶节点开始(其高度为1)自底向上逐层累加的。虽然树的深度和高度一样,但是具体到树的某个节点,其深度和高度是不一样的。我的理解是:非根非叶结点的深度是从根节点数到它的,高度是从叶节点数到它的。
二叉树宽度是什么?
要求二叉树的宽度的话,则可根据树的高度设置一个数组temp。temp[i]用于存放第i层上的结点数(即宽度)。在访问结点时,把相应计算该结点下一层的孩子数并存入相应数组元素中,遍历左子树后向上返回一层计算右子树的宽度,并取出最大的一个数组元素作为树的宽度。

#define M 10 假设二叉树最多的层数

int Width(BinTree T)



int static n[M];向量存放各层结点数

int static i=1;

int static max=0;最大宽度

if(T)



if(i==1) 若是访问根结点



n[i]++; 第1层加1

i++; 到第2层

if(T->lchild)若有左孩子则该层加1

n[i]++;

if(T->rchild)若有右孩子则该层加1

n[i]++;



else

访问子树结点

i++; 下一层结点数

if(T->lchild)

n[i]++;

if(T->rchild)

n[i]++;



if(max

Width(T->lchild);遍历左子树

i--; 往上退一层

Width(T->rchild);遍历右子树



return max;

算法结束

希望可以给你帮助!
什么叫二叉树的度和深度?请举例说明
二叉树结点的度数指该结点所含子树的个数,二叉树结点子树个数最多的那个结点的度为二叉树的度。

二叉树的根结点所在的层数为1,根结点的孩子结点所在的层数为2,以此下去。深度是指所有结点中最深的结点所在的层数。

以上是关于二叉树的深度是啥?的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的深度平衡是啥意思?

二叉树中的权值是啥?

二叉树中的权值是啥?

二叉树9:二叉树的最大深度

代码随想录算法训练营第16天 | ● 104.二叉树的最大深度 559.n叉树的最大深度 ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数

二叉树--二叉树的最大深度