LC104 二叉樹的最大深度
阿新 • • 發佈:2020-07-16
本題給定的函式引數只有結點指標,由於無法傳入當前節點的深度,無法使用自頂向下的方法求解
遞迴解法-自底向上
class Solution { public: int maxDepth(TreeNode* root) { if(root == nullptr) return 0; int leftDep = maxDepth(root->left) + 1; int rightDep = maxDepth(root->right) + 1; return leftDep > rightDep ? leftDep : rightDep; } };
如果引數可以多一個int型別,則可以使用自頂向下的方法,直接呼叫maxDepth(root, 0)
即可
遞迴解法-自頂向下
class Solution { private: int ans; public: int maxDepth(TreeNode* root, int dep) { if(!root->left && !root->right) return ans > (dep + 1) ? ans : (dep + 1); maxDepth(root->left, dep + 1); maxDepth(root->right, dep + 1); } };
非遞迴解法
也可以使用層次遍歷來解決這個問題,參考之前層次遍歷的寫法即可
class Solution { public: int maxDepth(TreeNode* root) { int res = 0; if(root == nullptr) return res; queue<TreeNode*> level; level.push(root); while(!level.empty()){ int size = level.size(); for(int i = 0; i < size; i ++){ TreeNode* nowNode = level.front(); if(nowNode->left != nullptr) level.push(nowNode->left); if(nowNode->right != nullptr) level.push(nowNode->right); level.pop(); } res++; } return res; } };