题目链接:二叉树的深度_牛客题霸_牛客网
注意点:
1.队列的应用:每一层的头节点先如队列,再弹出作为队头,后续入队的均为左右孩子,弹出层数
2.队列:C++队列queue用法详解_KEPROM的博客-CSDN博客_c++ queue
2.官方推荐的递归:分治法,左右递归找到最深的节点层数,求出最大的在+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) return 0;
//队列存储每一层的节点
queue<TreeNode*> q;
//根节点入队列
q.push(pRoot);
//记录深度
int res = 0;
while(!q.empty()){
//记录当前层有多少个节点
int n = q.size();
while(n--){
//本层的根节点做队头,再入队的就是左右孩子
TreeNode* node = q.front();
q.pop();
//添加下一层的左右结点
if(node->left) q.push(node->left);
if(node->right) q.push(node->right);
}
res++;
}
return res;
}
};
方法二:递归
/*
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) return 0;
int lval = TreeDepth(pRoot->left);
int rval = TreeDepth(pRoot->right);
return max(lval,rval)+ 1;
}
};