39-求二叉樹的最小深度和最大深度
阿新 • • 發佈:2019-02-12
問題描述
給定一個二叉樹,找出其最小深度和最大深度。
二叉樹的最小深度為根節點到最近葉子節點的距離。
二叉樹的最大深度為根節點到最遠葉子結點的距離
給出一棵如下的二叉樹:
1
/ \
2 3
/ \
4 5
這個二叉樹的最小深度為 2,最大深度為3
解題思路
- 一定要注意定義,比如下面這棵樹的最小深度是3不是1
1
\
2
\
3
- 方法和找最大深度一樣
只需要判斷如果左右兒子中有空結點,則返回非空結點的兒子的高度+1 - 最大深度則不需要考慮空結點的問題啦~
以上主體描述,參考連結:https://www.jianshu.com/p/884b6d3bd9d3
程式碼實現
/*********************************************** 【問題描述】 Author:tmw date:2018-2-14 ************************************************/ #include <stdio.h> #include <stdlib.h> /**二叉樹的資料結構**/ typedef struct BiTreeNode { char data; struct BiTreeNode *lchild; struct BiTreeNode *rchild; }BiTreeNode,*BiTree; /**二叉樹的建立--按照先序方式建立--插入**/ void CreateBiTree(BiTree *T) { char val; scanf("%c",&val); if(val == '#') *T = NULL; //null表示為空枝 else { *T = (BiTree)malloc(sizeof(BiTreeNode)); if(!*T) exit(0); (*T)->data = val; CreateBiTree(&(*T)->lchild); CreateBiTree(&(*T)->rchild); } } int minDepth(BiTree T) { if(T==NULL) return 0; int depth_left = minDepth(T->lchild); int depth_right = minDepth(T->rchild); if(depth_left==0||depth_right==0) return depth_left+depth_right+1; else return depth_left>depth_right?depth_right+1:depth_left+1; } int maxDepth(BiTree T) { if(T==NULL) return 0; int depth_left = maxDepth(T->lchild); int depth_right = maxDepth(T->rchild); return depth_left>depth_right?depth_left+1:depth_right+1; }
測試程式碼
測試資料按照下圖給出的提供:
int main()
{
printf("測試程式碼\n");
BiTree T;
printf("建立二叉樹:請按先序遍歷的方式輸入二叉樹結點:\n");
CreateBiTree(&T);
printf("此二叉樹的最小深度為:%d\n",minDepth(T));
printf("此二叉樹的最大深度為:%d\n",maxDepth(T));
return 0;
}
測試結果如下: