劍指offer——二叉樹的深度C++

baixiaofei567發表於2020-12-30

在這裡插入圖片描述
遞迴和迴圈兩種方法

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    int bfs(TreeNode* root){
        queue<TreeNode*> q;
        q.push(root);
        int level = 0;
        while(!q.empty()){
            //每次將這一層所以的子結點全加進去
            int sz = q.size();
            while(sz--){
                TreeNode* topNode = q.front();
                q.pop();
                if(topNode->left!=nullptr) q.push(topNode->left);
                if(topNode->right!=nullptr) q.push(topNode->right);
            }
            level++;
        }
        return level;
    }
    
    int TreeDepth(TreeNode* pRoot)
    {
        //遞迴求深度即可
        /*
        if(pRoot == nullptr) return 0;
        return max(TreeDepth(pRoot->left),TreeDepth(pRoot->right))+1;*/
        
        //非遞迴,bfs也行
        if(pRoot == NULL) return 0;
        return bfs(pRoot);
    }
};

相關文章