zoukankan      html  css  js  c++  java
  • Maximum Depth of Binary Tree

    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.

    Analyse: The same as Minimum Depth of Binary Tree

    1. Recursion

        Runtime: 8ms.

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     int maxDepth(TreeNode* root) {
    13         if(!root) return 0;
    14         
    15         int leftDepth = maxDepth(root->left);
    16         int rightDepth = maxDepth(root->right);
    17         
    18         if(leftDepth == 0 && rightDepth == 0) return 1;
    19         if(leftDepth == 0) leftDepth = INT_MIN;
    20         if(rightDepth == 0) rightDepth = INT_MIN;
    21         
    22         return 1 + max(leftDepth, rightDepth);
    23     }
    24 };

    2. Iteration: Compute the number of level. Initialize the level to be 0, after dealing with the current level, then level++.

        Runtime: 8ms.

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     int maxDepth(TreeNode* root) {
    13         if(!root) return 0;
    14         
    15         queue<TreeNode* > qu;
    16         qu.push(root);
    17         int level = 0;
    18         while(!qu.empty()){
    19             int n = qu.size();
    20             while(n--){
    21                 TreeNode* current = qu.front();
    22                 qu.pop();
    23                 
    24                 if(current->left) qu.push(current->left);
    25                 if(current->right) qu.push(current->right);
    26             }
    27             level++;
    28         }
    29         return level;
    30     }
    31 };
  • 相关阅读:
    accpet和connect设置超时
    两个模块的函数如何相互调用?
    有头结点的双向链表
    信号量PV操作实现进程间同步与互斥
    linux read write函数
    函数用指针传参挂死分析
    TCP/IP为什么需要四次握手和三次挥手
    负数在内存中的表示
    malloc的堆内存挂死原因;负数的表示
    Makefiel----no rule to make target 错误问题
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/4692400.html
Copyright © 2011-2022 走看看