首页 > 其他 > 详细

LeetCode----Maximum Depth of Binary Tree 求二叉树最大深度

时间:2014-03-09 08:18:38      阅读:450      评论:0      收藏:0      [点我收藏+]

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!