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* pNode3 = CreateBinaryTreeNode(3); BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4); BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6); BinaryTreeNode* pNode7 = CreateBinaryTreeNode(7); //连接树结点 ConnectTreeNodes(pNode1, pNode2, pNode3); ConnectTreeNodes(pNode2, pNode4, pNode5); ConnectTreeNodes(pNode3, NULL, pNode6); ConnectTreeNodes(pNode5, pNode7, NULL ); int depth=TreeDepth(pNode1); cout<<depth<<endl; system("pause");}出处:http://www.cnblogs.com/xwdreamer
只有一个根,没有孩子的二叉树度为0,所有节点只有一个孩子的二叉树的度为1,节点中有两个孩子的二叉树的度为2。
树所包含的节点中,拥有最大的分支的数目为该树的度。二叉树的度小于等于2,因为二叉树的定义要求二叉树中任意结点的度数(结点的分支数)小于等于2 ,并且两个子树有左右之分,顺序不可颠倒。
扩展资料:
二叉树叶子结点计算方法:
例:一棵树度为4,其中度为1,2,3,4的结点个数分别为4,2,1,1,则这棵树的叶子节点个数为多少?
解:因为任一棵树中,结点总数=度数*该度数对应的结点数+1,所以:
n0+4+2+1+1 = (0*n0 + 1*4 + 2*2 + 3*1 + 4*1)+1
则:n0=8
其中:n0表示叶子结点。
这已经退化成一个链表,不然不能只有一个叶子
12.。。。。。仅供参考
裴毓银屑: 在计算机科学中,二叉树是每个结点最多有两个子树的有序树.通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用作二叉查找树和二叉堆或是二叉排序树. 二叉树的每个结点至多只有二棵子树(不存在度大...
岢岚县13041282167: C语言 二叉树深度,解释一下 - ?
裴毓银屑: 叶子节点就是度为0的结点,比度为2的结点多一个,即度2的没有,这样度为1的结点就是11个,故深度为12(1度就是结点连着1个子树,二叉树最多俩子树,即左右子树)
岢岚县13041282167: “二叉树深度”程序详细解释!!! - ?
裴毓银屑: 整个程序的意思就是如果是空二叉树,深度就是0 否则,就是左子树与右子树的最大深度加上1 如图就是左子树的B的深度与右子树C的深度相比较,其中的最大值加上A本身的高度1
岢岚县13041282167: ★C语言中二叉树深度的计算某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层) DA 3 B 4 C 6 D 7没学过二叉树 包... - ?
裴毓银屑:[答案] 从根节点到叶子节点的每一个分支中,最长分支的节点的总数.(深度) 比如: 某二叉树共有7个结点,其中叶子结点只有1个,只有一种可能,就是所以非叶子节点都只有一个分支.这样从根到叶要走7个节点.
岢岚县13041282167: C语言中,二叉树的深度指?怎样计算?
裴毓银屑: 是二叉树的基本性质··深度为m的二叉树最多有2的m次幂减1的结点 比如深度为5的满二叉树那就是31个结点
岢岚县13041282167: 求二叉树高度的原理、算法是什么,越详细越好,C语言,谢谢 - ?
裴毓银屑: 首先分析二叉树的深度(高度)和它的左、右子树深度之间的关系.从二叉树深度的定义可知,二叉树的深度应为其左、右子树深度的最大值加1.由此,需先分别求得左、右子树的深度,算法中“访问结点”的操作为:求得左、右子树深度的...
岢岚县13041282167: 请问c语言中什么是2叉树,什么是2叉树节点,深度是什么,深度为5的满2叉树中节点的个数??
裴毓银屑: 二叉树是一种特殊的树形结构,二叉树中每个节点的度都不大于2,其可递归地定义如下:二叉树是N个结点的有限集合,它或者是空集,或者是由一个跟结点加上两棵分别称为左子树或右子树的互不相交的二叉树组成. 节点的概念跟树的节点概念一样 二叉树的根结点所在的层数为1,根结点的孩子结点所在的层数为2,以此下去.深度是指所有结点中最深的结点所在的层数. 2^5-1=31
岢岚县13041282167: 帮忙解释下二叉树,谢谢,详细点的 - ?
裴毓银屑: 二叉树就是每个节点度数都小于等于2的树.二叉树一般定义为:typedef struct BiNode{ TElemType data;//TElemType是数据元素的类型 struct BiNode *lchild,*rchild; //左右孩子指针 }BiTNode,*BiTree; 以C语言为例,二叉树先序、中序、后序遍...
岢岚县13041282167: 在C语言中,什么是二叉树啊??
裴毓银屑: 叉树是每个结点最多有两个子树的有序树.通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree).
岢岚县13041282167: 二级C中二叉树里的“度”是什么意思 - ?
裴毓银屑: 深度指的是“二叉树”的最高“度”,而“度”指的是“二叉树”的层数如:一个二叉树有三层,那么第三层就是二叉树的深度