二叉樹的深度 (遞迴與非遞迴方法整理)
我們可以從另一個角度來理解樹的深度:
如果一棵樹只有一個結點,那麼它的深度為1;
如果根結點只有左子樹沒有右子樹,那麼樹的深度是左子樹的深度加1,加1是加上根節點這一層
如果既有左子樹又有右子樹,那麼樹的深度應該是左、右子樹中深度較大的值再加1
code 如下:
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 nleft = TreeDepth(pRoot->left);
int nright = TreeDepth(pRoot->right);
return (nleft>nright)?(nleft+1):(nright+1);
}
};
二、非遞迴方法
思路
採用層次遍歷的方法,類似bfs的解法
每遍歷一層,depth++;
每一層,需使用一個變數len記錄該層的結點個數,也就是佇列的當前長度,然後依次在佇列中訪問該層的len個結點(將佇列中len個元素出佇列),並將下一層如佇列。
code如下:
int TreeDepth(TreeNode* pRoot)
{
queue<TreeNode*> q;
if(!pRoot) return 0;
q.push(pRoot);
int level=0;
while(!q.empty()){
int len=q.size();
level++;
while(len--){
TreeNode* tem=q.front();
q.pop();
if(tem->left) q.push(tem->left);
if(tem->right) q.push(tem->right);
}
}
return level;
}
---------------------
作者:克里特
來源:CSDN
原文:https://blog.csdn.net/hyqsong/article/details/50807183
版權宣告:本文為博主原創文章,轉載請附上博文連結!