求二叉树的最小深度和最大深度

问题描述

给定一个二叉树,找出其最小深度和最大深度。

二叉树的最小深度为根节点到最近叶子节点的距离。

二叉树的最大深度为根节点到最远叶子结点的距离

给出一棵如下的二叉树:

      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;
}

测试结果如下:




猜你喜欢

转载自blog.csdn.net/qiki_tangmingwei/article/details/79326602