给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回它的最大深度 3 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
//bfs版本
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
bfs没什么好讲的。。。
*/
class Solution {
public:
int maxDepth(TreeNode* root) {
queue<TreeNode*> node;
TreeNode *p=root;
if(p==NULL)
return 0;
int h=1,width=1;
node.push(p);
while(!node.empty())
{
for(int i=1;i<=width;i++)
{
p=node.front();
node.pop();
if(p->left!=NULL)
node.push(p->left);
if(p->right!=NULL)
node.push(p->right);
}
width=node.size();
if(!node.empty())
h++;
}
return h;
}
};
//深度优先:递归版
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root==NULL) return 0;
int l=maxDepth(root->left)+1;//还有这个函数???可以直接求出左右子树的深度,然后加上根节点即可
int r=maxDepth(root->right)+1;
return l>r?l:r;
}
};
//dfs
class Solution {
public:
int maxDepth(TreeNode* root) {
stack<pair<TreeNode*,int>>s;//新学习到了pair容器,就像py里的字典一样,键对应值
TreeNode *p=root;
if(p==NULL)
return 0;
int deep=0,maxDeep=0;
while(!s.empty()||p!=NULL)
{
while(p!=NULL)
{//这里是pair的一种初始化方式,下面是另外一种
// 1 pair<int, double> p1;
// 2 p1 = make_pair(1, 1.2);
s.push(pair<TreeNode*,int>(p,++deep));//把++deep写成了deep++竟然使得结果大变
p=p->left;//这个是先存入deep再自加的,显然是错的
}
p=s.top().first;
deep=s.top().second;
s.pop();
if(maxDeep<deep)
maxDeep=deep;
p=p->right;
}
return maxDeep;
}
};
附上pair的参考链接
https://www.cnblogs.com/lvchaoshun/p/7769003.html