审题
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
看到这道题,虽然是简单题,但是还是没啥想法…后来想到一个用个三目运算符的简便算法,但是超时,听说不用Math内置库就过不了,真的迷…那么还是分两种情况考虑吧,也是看题解后仿写的。
- 在方案一中,递归地寻找最深的树。
- 在方案二中,利用BFS及队列实现分层遍历,当队列为空,自然到底。
代码实现
方案一:
class Solution {
public:
int maxDepth(TreeNode* root) {
if ( !root ) return 0;
return max(maxDepth(root->left), maxDepth(root->right))+1;
}
};
方案2:
队列中的每次遍历元素即是该层元素,当该层没有元素即到底。
class Solution {
public:
int maxDepth(TreeNode* root) {
if ( !root ) return 0;
int ans=0;
queue<TreeNode*> Q;
Q.push(root);
while ( !Q.empty() ) {
int sz = Q.size();
while ( sz > 0 ) {
root = Q.front();
Q.pop();
if ( root->left ) Q.push(root->left);
if ( root->right ) Q.push(root->right);
sz--;
}
ans++;
}
return ans;
}
};
反思
树的知识总是和递归结合在一起,对这方面的知识还是很欠缺,不过树和图都是非常重要的数据结构了,一定要勤加练习,共勉之。