⑴ c语言二叉树的深度指什么怎么求
从根节点到叶子结点一次经过的结点形成树的一条路径,最长路径的长度为树的深度。根节点的深度为1。
解体思路:穗闷
1.如果根节点为空,则深度为0,返回0,递归的出口。
2.如果根节点不为空,那么深度至少姿唯为1,然后我们求他们左右子树的深度,
3.比较左右子树深度值,返回较大的那一个
4.通过递归调用
#include<iostream>
#include<stdlib.h>
usingnamespacestd;
structBinaryTreeNode
{
intm_nValue;
BinaryTreeNode*m_pLeft;
BinaryTreeNode*m_pRight;
};
//创建二叉树结点
BinaryTreeNode*CreateBinaryTreeNode(intvalue)
{
BinaryTreeNode*pNode=newBinaryTreeNode();
pNode->m_nValue=value;
pNode->m_pLeft=NULL;
pNode->m_pRight=NULL;
returnpNode;
}
//连接二叉树结点
voidConnectTreeNodes(BinaryTreeNode*pParent,BinaryTreeNode*pLeft,BinaryTreeNode*pRight)
{
if(pParent!=NULL)
{
pParent->m_pLeft=pLeft;
pParent->m_pRight=pRight;
}
}
//求二叉树深度
intTreeDepth(BinaryTreeNode*pRoot)//计算二叉树深度
{
if(pRoot==NULL)//如果pRoot为NULL,则深度为0,这也是递归的返回条件
return0;
//如果pRoot不为NULL,那么深度至少为1,所以left和right=1
intleft=1;
intright=1;
left+=TreeDepth(pRoot->m_pLeft);//求出左子树的深度
right+=TreeDepth(pRoot->m_pRight);//求出右子树深度
returnleft>right?left:right;//返回深度较大的那一个
}
voidmain()
{
//1
///
//23
///猜册弯
//456
///
//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);
intdepth=TreeDepth(pNode1);
cout<<depth<<endl;
system("pause");
}
出处:http://www.cnblogs.com/xwdreamer
⑵ c语言遍历二叉树,怎么求每个叶节点的高度
遍历的时候带一个变量表示高度,比如你用visit遍历的话就在参数里写个heigth变量,进入子节点的时候让height+1,遇到叶子节点的时候height的值就是其高度
⑶ C语言二叉树求其深度
http://..com/question/94976942.html?si=1
建议楼主到这里看看,其实裂兆局每一层都是有一个return函数,不知道楼主注意到了没有,其次,reutrn函数初始返回0, 接着有 return (m>n?m:n)+1;也猜银就是一个一个一层一层肆让加上去,所以会返回,而最后返回的就是答案