每日一算 Leetcode 104.二叉樹的最大深度

有兩種方法:

  1. 遞歸
  2. 迭代-利用隊列
// C++
/* 給定一個二叉樹,找出其最大深度。
二叉樹的深度爲根節點到最遠葉子節點的最長路徑上的節點數。
說明: 葉子節點是指沒有子節點的節點。
示例:
給定二叉樹 [3,9,20,null,null,15,7],
    3
   / \
  9  20
    /  \
   15   7
返回它的最大深度 3 。
*/  
 // 1. 利用遞歸實現
class Solution {
public:
    int maxDepth(TreeNode* root) {
    	if (root == NULL)
    		return 0;
    	return max(maxDepth(root->left), maxDepth(root->right)) + 1;
	}
}
// 2. 利用隊列實現迭代
class Solution {
public:
    int maxDepth(TreeNode* root) {
        // 如果root爲NULL,返回0;
        if (root == NULL)
            return 0;
        int count = 0;
        queue<TreeNode *> que;
        que.push(root);
        while (!que.empty())
        {
            // 定義root每層的個數
            int n = que.size();
            // 遍歷每層的各個節點,判斷每個節點的左右子節點是否爲NULL
            for (int i = 0; i < n; i++)
            {
                TreeNode *cur = que.front();
                if (cur->left != NULL)
                    que.push(cur->left);
                if (cur->right != NULL)
                    que.push(cur->right);
                // 去除遍歷過的節點
                que.pop();
            }
            // 每遍歷一層,加1
            count++;
        }
        return count;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章