题目

思路
这道题采用递归很简单,直接上代码吧
class Solution {
public:
int maxDepth(TreeNode* root) {
if (root == NULL)
return 0;
if (!root->left && !root->right)
return 1;
return (max(maxDepth(root->left), maxDepth(root->right))+1);
}
};
需要补充的是,采用递归实际上是根据DFS(深度优先)的思想解题的,这种方式的缺点在于,如果层数过深(比如所有的点都位于左子树),那么我们很可能保存过多的临时变量,导致栈溢出,这个怎么解释呢
事实上,函数调用的参数是通过栈空间来传递的,在调用过程中会占用线程的栈资源。而递归调用,只有走到最后结束点后函数才能一次退出,而未到达最后的结束点之前,占用的栈空间一直没有释放,如果递归调用的次数太多,就可能导致占用的栈资源超过线程的最大值,从而导致栈溢出,导致程序的异常退出
1075

被折叠的 条评论
为什么被折叠?



