曾经跪倒在京东c++实习生一面的路上,面试官说二叉树的高度,我竟然想用一个公式计算出来,莫非那个时刻的我是疯了不成,毕竟是人生第一次面试,脑回路清奇也不是不能有,但是也不能那么清奇啊,莫非是个傻子不成,好了,废话不多说,撸吧!以下代码都是牛客网通过的代码。
1.递归版本(不得不说,递归真的是无比有用)
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
int TreeDepth(TreeNode* pRoot)
{
if(pRoot==NULL)
return 0;
int left=TreeDepth(pRoot->left);
int right=TreeDepth(pRoot->right);
return (left>right?left:right)+1;
}
};
2.非递归版本(为啥递归版简单清晰还要有非递归版本,那当然是因为递归耗时耗空间啊)
说白了,就是无论用哪一种遍历方式,最终能求出二叉树深度,那就是好的遍历方式。
层序遍历
class Solution {
public:
int TreeDepth(TreeNode* pRoot)
{
queue<TreeNode *>q;
if(pRoot==NULL)
return 0;
q.push(pRoot);
int depth=0;
while(!q.empty())
{
int len=q.size();
depth++;
while(len--)
{
TreeNode * temp=q.front();
q.pop();
if(temp->left) q.push(temp->left);
if(temp->right) q.push(temp->right);
}
}
return depth;
}
};