leetcode——二叉樹的最大深度
阿新 • • 發佈:2021-01-21
題目:給定一個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。
說明:葉子節點是指沒有子節點的節點。
示例:
給定二叉樹 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回最大深度 3
方案一 遞迴
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: int maxDepth(TreeNode* root) { if (nullptr == root) { return 0; } return 1 + max(maxDepth(root->left), maxDepth(root->right)); } };
時間複雜度n為節點個數,每個節點只遍歷一次
空間複雜度h為樹的高度,h次遞迴呼叫。
方案二:廣度優先演算法
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: int maxDepth(TreeNode* root) { if (nullptr == root) { return 0; } queue<TreeNode*> Q;// 儲存當前遍歷層的節點 int depth = 0; Q.push(root); while (!Q.empty()) { int sz = Q.size(); while (sz > 0) { TreeNode* node = Q.front();Q.pop(); if (node->left != nullptr) Q.push(node->left); if (node->right != nullptr) Q.push(node->right); sz--; } depth += 1; } return depth; } };
時間複雜度
空間複雜度