生活随笔
收集整理的這篇文章主要介紹了
数据结构——二叉树的最小深度算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定一個二叉樹,找出其最小深度。
最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。
說明:葉子節點是指沒有子節點的節點。
輸入:root = [3,9,20,null,null,15,7]
輸出:2
示例 2:
輸入:root = [2,null,3,null,4,null,5,null,6]
輸出:5
提示:
樹中節點數的范圍在 [0, 105] 內
-1000 <= Node.val <= 1000
來源:力扣(LeetCode)
111.二叉樹的最小深度
思路:
1.如果T(根節點)為空,返回0;
2.如果T的左右子樹都為空,返回1;
3.如果T->lchild不為空且T->rchild為空,返回左子樹的高度+1;
4.如果T->lchild為空且T->rchild不為空,返回右子樹的高度+1;
如果T->lchild不為空且T->rchild不為空,即左右子樹都不為空,返回min(左子樹的高度+1,右子樹的高度+1);
#include<stdio.h>
#include<bits/stdc++.h> typedef char TElemType
;
typedef int status
;
typedef struct BiNode
{TElemType data
;struct BiNode
*lchild
;struct BiNode
*rchild
;
}BiNode
,*BiTree
;
void CreateBiTree(BiTree
&T
)
{TElemType ch
;scanf("%c",&ch
);if(ch
=='#')T
=NULL;else {T
=(BiNode
*)malloc(sizeof(BiNode
));if(!T
)exit(-1);T
->data
=ch
;CreateBiTree(T
->lchild
);CreateBiTree(T
->rchild
);}
}void DestroyBiTree(BiTree
&T
)
{if(T
==NULL)exit(-1);else{DestroyBiTree(T
->lchild
);DestroyBiTree(T
->rchild
);free(T
);}
}int preorderTraverse(BiTree T
)
{if(T
==NULL)return 0;else {printf("%c ",T
->data
);preorderTraverse(T
->lchild
);preorderTraverse(T
->rchild
);}} int InorderTraverse(BiTree T
)
{if(T
==NULL)return 0;else {InorderTraverse(T
->lchild
);printf("%c ",T
->data
);InorderTraverse(T
->rchild
);}}int PostorderTraverse(BiTree T
)
{if(T
==NULL)return 0;else {PostorderTraverse(T
->lchild
);PostorderTraverse(T
->rchild
);printf("%c ",T
->data
);}}
int minDepth(BiTree T
)
{int depth1
=0,depth2
=0,depth
=0;if(T
==NULL) return 0;if(T
->lchild
==NULL&&T
->rchild
==NULL) return 1;if(T
->lchild
!=NULL&&T
->rchild
==NULL) {depth1
=minDepth(T
->lchild
);return depth1
+1;}if(T
->lchild
==NULL&&T
->rchild
!=NULL) {depth2
=minDepth(T
->rchild
);return depth2
+1;}if(T
->lchild
==NULL&&T
->rchild
==NULL){depth1
=minDepth(T
->lchild
);depth2
=minDepth(T
->rchild
);}if(depth1
<depth2
)depth
=depth1
;else depth
=depth2
;return depth
+1;} int main()
{BiTree T
;printf("創建樹輸入樹T的先序序列(其中使用#代表空節點)\n");CreateBiTree(T
);printf("求樹的最小深度算法\n");printf("樹的最小深度為:%d\n",minDepth(T
));printf("先序遍歷算法");preorderTraverse(T
);printf("\n中序遍歷算法");InorderTraverse(T
);printf("\n后序遍歷算法");PostorderTraverse(T
);}
總結
以上是生活随笔為你收集整理的数据结构——二叉树的最小深度算法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。