曾经跪倒在京东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; } };