输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
例如:给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
思路
dfs下,过程中记录深度。最后找最大值即可。
还可以使用层次遍历的方法,记录深度。
答案
深度优先方法:
class Solution {
private:
int max_level=0;
void preOrder(TreeNode* node,int level) {
if(!node) {
if(level-1>max_level)
max_level=level-1;
return;
}
preOrder(node->left,level+1);
preOrder(node->right,level+1);
}
public:
int maxDepth(TreeNode* root) {
preOrder(root,1);
return max_level;
}
};
广度优先方法:
class Solution {
public:
int maxDepth(TreeNode* root) {
if(!root)
return 0;
queue<TreeNode*>q;
q.push(root);
int tobePrint=1;
int next_level=0;
int level=0;
while(!q.empty()) {
TreeNode* t=q.front();
q.pop();
if(t->left) {
q.push(t->left);
next_level=next_level+1;
}
if(t->right) {
q.push(t->right);
next_level=next_level+1;
}
if(tobePrint>0) {
tobePrint=tobePrint-1;
}
if(tobePrint==0) {
tobePrint=next_level;
next_level=0;
level=level+1;
}
}
return level;
}
};