题目描述:
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
输入:
{1,2,3,4,5,#,6,#,#,7}
输出:
4
解法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;
queue<pair<TreeNode*,int>>q;
q.push(make_pair(pRoot, 1));
int maxDept=1;
while(!q.empty()){
TreeNode*curNode=q.front().first;
int curDepth=q.front().second;
q.pop();
if(curNode){
maxDept=max(maxDept,curDepth);
q.push({curNode->left,curDepth+1});
q.push({curNode->right,curDepth+1});
}
}
return maxDept;
}
};
解法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 == nullptr)return 0;
int leftDept = TreeDepth(pRoot->left)+1,rightDept=TreeDepth(pRoot->right)+1;
return max(leftDept,rightDept);
}
};