题目描述:
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
例如:
给定二叉树 [3,9,20,null,null,15,7],
返回它的最大深度 3 。
提示:
节点总数 <= 10000
思路1:先序遍历(DFS)
递归实现,二叉树的深度为1+max(左子树深度,右子树深度)。
/**
* 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;
return 1+max(maxDepth(root->left),maxDepth(root->right));
}
};
思路2:层序遍历(BFS)
队列实现。end记录每一层最后一个节点,每次到达end,count+1。每次访问到队列中节点,如果其左右子树存在,便将其左右子树加入到队列中。
/**
* 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;
queue<TreeNode *>q;
TreeNode *end = root;//记录每层最后一个节点
int count=0;
q.push(root);
while(!q.empty()){
TreeNode *tm=q.front();
q.pop();
if(tm->left) q.push(tm->left);
if(tm->right) q.push(tm->right);
if(tm==end){//到达最后一个节点,count+1
end=q.back();
count+=1;
}
}
return count;
}
};