剑指 Offer 55 - I. 二叉树的深度

输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。

例如:

给定二叉树 [3,9,20,null,null,15,7],

3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。

思路:

建立一个队列去保存二叉树中每个元素的值

代码:

typedef struct
{
    struct TreeNode *array[10000];
    int index;
    int outdex;
}
void startqueue(struct TreeNode *t,Queue *queue)
{
     queue->array[0]=t;
     queue->index=1;
     queue->outdex=0;
}
//bfs求深度函数
int bfstreehign(Queue *queue)
{
     int len,i,count=0;
     len=1;
     struct TreeNode *elem;
     while(len)
    {
     for(i=0;i<len;i++)
     {
       elem=queue->array[queue->outdex];
       if(elem->left!=NULL)     
        queue->array[queue->index++]=elem->left;
       if(elem->right!=NULL)
       queue->array[queue->index++]=elem->right;
       queue->outdex++;
     }
     len=queue->index-queue->outdex;
     count++;
   }
   return count;
}
int maxDepth(struct TreeNode* root)
{
   Queue queue;
   int count=0;
   if(root==NULL)
     return 0;
   startqueue(root,&queue);
   count=bfstreehign(&queue);
   return count;
}

  求二叉树的深度步骤:先初始化队列,然后对队列中的元素进行遍历,先出队的那个元素代表它为当前层的最后一个元素,深度+1

posted @ 2020-10-20 09:17  进寸欢喜  阅读(63)  评论(0编辑  收藏  举报