⑴ 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;也猜銀就是一個一個一層一層肆讓加上去,所以會返回,而最後返回的就是答案