二叉樹的深度是什麼?

General 更新 2024-11-26

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(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)自頂向下逐層累加的,而高度是從葉節點開始(其高度為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,以此下去。深度是指所有結點中最深的結點所在的層數。

相關問題答案
二叉樹的深度是什麼?
二叉樹的深度怎麼算?
玉樹的花語是什麼?
楊樹的葉子是什麼形狀?
中立的態度是什麼意思?
白楊樹的特點是什麼?
二維碼的內容是什麼?
土的稠度是什麼意思?
十二直神的玉堂是什麼?
樹的筆順是什麼?