二叉树的深度是啥?
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(1in),有:
如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是i/2
如果2i>n,则结点i无左孩子;如果2in,则其左孩子是2i
如果2i+1>n,则结点i无右孩子;如果2i+1n,则其右孩子是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,以此下去。深度是指所有结点中最深的结点所在的层数。
以上是关于二叉树的深度是啥?的主要内容,如果未能解决你的问题,请参考以下文章
代码随想录算法训练营第16天 | ● 104.二叉树的最大深度 559.n叉树的最大深度 ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数