求二叉樹的深度、總結點數和葉子結點數

二叉樹的二叉鏈表的存儲結構:


typedef?? char?? TElemType;

typedef?? struct??? BiTNode

{

???????????? TElemType data;//數據元素

???????????? BiTNode? *? lchild;//指向左孩子

????????????? BiTNode? *? rchild;//指向右孩子

}BiTNode,* BiTree;



一、二叉樹的深度

如果二叉樹為空,結點的深度為0;

如果二叉樹只有一個結點G為例,其中,它的左右子樹的深度為0;而這種情況二叉樹的深度為1。

如果二叉樹有兩個結點D,G為例,其中,以D為根結點的二叉樹的左子樹的深度為0,右子樹的深度為(0+1);而這種情況二叉樹的深度為2。

…………

如果二叉樹有n個結點,二叉樹的深度為二叉樹左右子樹深度的最大值+1。

代碼:

int Depth(BiTree T)

{

???????????????????? int m,n;

???????????????????? if(!T)??????????????????????????????????????????????? ?? return 0;

???????????????????? if(!T->lchild && !T->rchild) ? ? ? ? ? return 1;

???????????????????? else

???????????????????? {

??????????????????????????????????? m = Depth(T->lchild);

??????????????????????????????????? n = Depth(T->rchild);

???????????????????????????????????? return 1+(m>n?m:n);

??????????????????????? }

}


二、二叉樹的葉子結點數

如果二叉樹為空,二叉樹的葉子結點數為0;

如果二叉樹只有一個結點G(左右子樹為空)為例,而這種情況二叉樹的葉子結點數為1。

如果二叉樹有兩個結點D(右子樹為非空),G(左右子樹為空)為例,其中,以D為根結點的二叉樹的左子樹的葉子結點數為0,右子樹的葉子結點數為1;而這種情況二叉樹的葉子結點數為1。

…………

如果二叉樹有n個結點,二叉樹的葉子結點數為二叉樹左右子樹葉子結點數的和。

代碼:

int CountLeaf(BiTree T)

{

???????????????????????????? int m,n;

???????????????????????????? if(!T)???????????????????????????????????????????????????????????? return 0;

????????????????????????????? if(!T->lchild && !T->rchild) ? ? ? ? ? ? ? ? ? return 1;

????????????????????????????? else

???????????????????????????? {

??????????????????????????????????????????? m = CountLeaf(T->lchild);

?????????????????????????? ? ? ? ? ? ? ? ? ? n = CountLeaf(T->rchild);

???????????????????????? ? ? ? ? ? ? ? ? ? ? return m+n;

??????????????????????????????? }

}


三、二叉樹的結點數

如果二叉樹為空,二叉樹的結點數為0;

如果二叉樹只有一個結點G(左右子樹為空)為例,而這種情況二叉樹的結點數為1。

如果二叉樹有兩個結點D(右子樹為非空),G(左右子樹為空)為例,其中,以D為根結點的二叉樹的左子樹的結點數為0,右子樹的結點數為1;而這種情況二叉樹的結點數為2。

…………

如果二叉樹有n個結點,二叉樹的結點數為二叉樹左右子樹結點數的和+1(根結點)。

代碼:

int Count(BiTree T)

{

?????????????????????? int m,n;

?????????????????????? if(!T) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? return 0;

??????????????????????? if(!T->lchild && !T->rchild)??????????? return 1;

??????????????????????? else

?????????????????????? {

?????????????????????????? ? ? ? ?? m = Count(T->lchild);

????????????????????????????????? ? n = Count(T->rchild);

??????????????????????????????????? return m+n+1;

????????????????????? }

}

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • B樹的定義 一棵m階的B樹滿足下列條件: 樹中每個結點至多有m個孩子。 除根結點和葉子結點外,其它每個結點至少有m...
    文檔隨手記閱讀 13,345評論 0 25
  • 第一章 緒論 什么是數據結構? 數據結構的定義:數據結構是相互之間存在一種或多種特定關系的數據元素的集合。 第二章...
    SeanCheney閱讀 5,822評論 0 19
  • 數據結構和算法--二叉樹的實現 幾種二叉樹 1、二叉樹 和普通的樹相比,二叉樹有如下特點: 每個結點最多只有兩棵子...
    sunhaiyu閱讀 6,529評論 0 14
  • 1.樹的定義 樹是n(n>=0)個結點的有限集.n=0時稱為空樹.在任意一顆非空樹種:(1)有且僅有一個特定的稱為...
    e40c669177be閱讀 2,894評論 1 14
  • 每個人都會有自己負面情緒的時候 我們該如何做呢? 有時我們樂意傾訴 別人不見得樂意傾聽 我正經歷著這一個階段 這時...
    鄭大寶cc閱讀 126評論 0 0