输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1 。
题解1
/*
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 == nullptr)
return 0;
return 1 + max(TreeDepth(pRoot->left), TreeDepth(pRoot->right));
}
};
题解2
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
void _TreeDepth(TreeNode* pRoot, int depth, int& maxdepth)
{
if(pRoot == nullptr)
{
maxdepth = depth > maxdepth ? depth : maxdepth;
return;
}
_TreeDepth(pRoot->left, depth+1, maxdepth);
_TreeDepth(pRoot->right, depth+1, maxdepth);
}
int TreeDepth(TreeNode* pRoot) {
if(pRoot == nullptr)
return 0;
int depth = 0;
int maxdepth = 0;
_TreeDepth(pRoot, depth, maxdepth);
return maxdepth;
}
};
题解3:层序遍历
/*
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 == nullptr)
return 0;
// 层序遍历 队列
queue<TreeNode*> q;
int cnt1 = 1, ret = 0;
q.push(pRoot);
while(!q.empty())
{
++ret;
int cnt2 = 0;
while(cnt1--)
{
TreeNode* cur = q.front();
q.pop();
if(cur->left)
{
q.push(cur->left);
++cnt2;
}
if(cur->right)
{
q.push(cur->right);
++cnt2;
}
}
cnt1 = cnt2;
}
return ret;
}
};