题目:
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
解析:
方法一: 递归,深度遍历(dfs)。
方法二: 层序遍历(用到队列)。
参考答案:
/***
* struct TreeNode{
* int val;
* TreeNode *left;
* TreeNode *right;
* };
*/
class Solution{
public:
//递归
int maxDepth(TreeNode *root){
if(root == NULL)
return 0;
int leftDepth = maxDepth(root -> left);
int rightDepth = maxDepth(root -> right);
return leftDepth > rightDepth ? (leftDepth + 1) : (rightDepth + 1);
}
//层序遍历
int maxDepth(TreeNode *root){
if(root == NULL)
return 0;
queue<TreeNode*> q;
q.push(root);
int depth = 0;
while(!q.empty()){
int size = q.size();
depth++;
for(int i = 0; i < size; ++i){
TreeNode* curr = q.front();
q.pop();
if(NULL != curr->left){
q.push(curr->left);
}
if(NULL != curr->right){
q.push(curr->right);
}
}
}
return depth;
}
};