一.题目要求
给定一个二叉树 root ,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
二.题目难度
简单
三.输入样例
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:3
示例 2:
输入:root = [1,null,2]
输出:2
提示:
树中节点的数量在 [ 0 , 1 0 4 ] [0, 10^4] [0,104]区间内。
-100 <= Node.val <= 100
四.解题思路
解法1:DFS后序遍历求深度
解法2:BFS层序遍历,从root开始将每层结点的左右孩子加入,处理完一层depth++,直到队列空。
五.代码实现
DFS
/*** 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(!root) return 0;//后序遍历//左子树int left = maxDepth(root->left);//右子树int right = maxDepth(root->right);//求深度return left > right ? left + 1 : right + 1;}
};
BFS
/*** 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(!root) return 0;queue<TreeNode*> treeq;int depth = 0;treeq.push(root);while(!treeq.empty()){int remained = treeq.size();while(remained > 0){TreeNode* tmp = treeq.front();treeq.pop();remained--;if (tmp->left != nullptr) treeq.push(tmp->left);if (tmp->right != nullptr) treeq.push(tmp->right);}depth++;}return depth;}
};
六.题目总结
用单栈可否实现后序遍历求深度