Given a binary tree, find its maximum depth.
The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
给出一个二叉树,找到它的最大深度。
PS:最大深度即从根节点到叶子节点的最长距离。
思路:以前做过,是层次遍历,用到的是STL中的queue,存储节点的指针及它目前的层数。从上向下遍历。
,struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
struct level
{
TreeNode* node;
int degree;
}; //定义Queue的结构类型
class Solution {
public:
int maxDepth(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(root==NULL)return 0;
queue<level> que;//STL中Queue的用法 ,容器
level deepthptr; //声明一个level类型的结构体变量deepthptr
deepthptr.degree=1; //此结点目前的深度
deepthptr.node=root; //指针node指向根结点
que.push(deepthptr); //STL中Queue的使用,deepthptr入队
int degree=1; //最大深度一开始为1
while(!que.empty()) //队列是否为空
{
level ptr=que.front(); //第一个元素
que.pop(); //清除第一个元素
degree=ptr.degree; //此结点的深度赋值给最大深度
if(ptr.node->left!=NULL) //当某个结点的左右结点都为空是,即叶子结点,它的目前的深度就是最大深度
{
level p;
p.node=ptr.node->left;
p.degree=ptr.degree+1;
que.push(p);
}
if(ptr.node->right!=NULL)
{
level p;
p.node=ptr.node->right;
p.degree=ptr.degree+1;
que.push(p);
}
}
return degree;
}
};
当然 还有更简单的算法 就是利用递归,代码很简单。
class Solution {
public:
int maxDepth(TreeNode *root) {
if(!root)
return 0;
int leftchild = maxDepth(root->left);
int rightchild = maxDepth(root->right);
return (leftchild > rightchild) ? (leftchild + 1) : (rightchild + 1);
}
};递归比较简单,但是想到不容易。
加油!
LeetCode----Maximum Depth of Binary Tree 求二叉树最大深度,布布扣,bubuko.com
LeetCode----Maximum Depth of Binary Tree 求二叉树最大深度
原文:http://feilei.blog.51cto.com/8675988/1370880