赞
踩
给定一个二叉树 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; } };
用单栈可否实现后序遍历求深度
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。