题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
时间限制:1秒 空间限制:32768K 热度指数:122264
思路
- 广度遍历,队列存储结点,变量lh存储上一行的最后一个结点的位置,变量num存储已经入队的结点数量
- 当访问的结点为上一行最后一个结点时,更改上一行最后一个结点的值为当前已经入队的结点数(因为此时已经将上一行的所有子节点都入队了)
- 循环1,2至队空
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
int TreeDepth(TreeNode* pRoot)
{
if(pRoot==NULL)
return 0;
else if(pRoot->left==NULL&&pRoot->right==NULL)
return 1;
else
{
queue<TreeNode*> q;
int num=1; //已经入队的元素数
int lh=1; //上一行的最后一个结点位置
int current=0;//当前访问的结点数
int h=0; //行数,即深度
q.push(pRoot);
TreeNode* a;
while(!q.empty())
{
a=q.front();
q.pop();
if(a->left!=NULL)
{
q.push(a->left);
++num;
}
if(a->right!=NULL)
{
q.push(a->right);
++num;
}
if(++current==lh)
{
lh=num;
++h;
}
}
return h;
}
}
};