题目
说明:解法在代码中
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int maxDepth(TreeNode* root) {
//使用的是队列+层序遍历的方法
if (root == NULL) return 0;
//初始化深度
int depth = 0;
//使用这个c++中已有的一种数据结构:队列,每一个节点类型是TreeNode*型
queue<TreeNode*> que;
//根节点入栈
que.push(root);
//循环条件:队列不为空(为空时所有结点都已经遍历完一次了)
while(!que.empty()) {
//设置队列长度为接下来循环的次数
int size = que.size();
// 记录深度
depth++;
//遍历队列中已有节点,去探寻他们的孩子结点并把他们压入队列中作为下一次遍历的结点(如果已有的所有节点已经全部是叶子结点将跳出while循环(队列置空)),有种层次遍历的感觉
for (int i = 0; i < size; i++) {
//返回队列的第一个元素
TreeNode* node = que.front();
//弹出第一个元素
que.pop();
//如果他有左右孩子就依次压入栈中
if (node->left)
que.push(node->left);
if (node->right)
que.push(node->right);
}
}
return depth;
}
};