1. 程式人生 > >二叉樹的深度 (遞迴與非遞迴方法整理)

二叉樹的深度 (遞迴與非遞迴方法整理)

    我們可以從另一個角度來理解樹的深度:

    如果一棵樹只有一個結點,那麼它的深度為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  
版權宣告:本文為博主原創文章,轉載請附上博文連結!