二叉樹的深度 (遞歸與非遞歸方法)


一、 遞歸的方法

思路:

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

如果一棵樹只有一個結點,那么它的深度為1

如果根結點只有左子樹沒有右子樹,那么樹的深度是左子樹的深度加1,加1是加上根節這一層

如果既有左子樹又有右子樹,那么樹的深度應該是左、右子樹中深度較大的值再加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 nleft = TreeDepth(pRoot->left);
        int nright = TreeDepth(pRoot->right);

        return (nleft>nright)?(nleft+1):(nright+1);

    }
};

二、非遞歸方法

思路

采用層次遍歷的方法,類似bfs的解法

每遍歷一層,depth++;

每一層,需使用一個變量len記錄該層的結點個數,也就是隊列的當前長度,然后依次在隊列中訪問該層的len個結點(將隊列中len個元素出隊列),並將下一層如隊列。

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;
    } 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM