二叉树的深度是什么
答案:1 悬赏:10 手机版
解决时间 2021-02-26 02:23
- 提问者网友:星軌
- 2021-02-25 15:02
二叉树的深度是什么
最佳答案
- 五星知识达人网友:街头电车
- 2021-02-25 15:35
问题一:C语言二叉树的深度指什么?怎么求? 从根节点到叶子结点一次经过的结点形成树的一条路径,最长路径的长度为树的深度。根节点的深度为1。
解体思路:
1.如果根节点为空,则深度为0,返回0,递归的出口。
2.如果根节点不为空,那么深度至少为1,然后我们求他们左右子树的深度,
3.比较左右子树深度值,返回较大的那一个
4.通过递归调用
#include#includeusing 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。
算法如下:
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.com/...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.如果根节点为空,则深度为0,返回0,递归的出口。
2.如果根节点不为空,那么深度至少为1,然后我们求他们左右子树的深度,
3.比较左右子树深度值,返回较大的那一个
4.通过递归调用
#include#includeusing 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。
算法如下:
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.com/...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;//返回深度较大的那一个
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯