剑指 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