zoukankan      html  css  js  c++  java
  • LeetCode 104. Maximum Depth of Binary Tree二叉树的最大深度 C++/Java

    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.

    Note: A leaf is a node with no children.

    Example:

    Given binary tree [3,9,20,null,null,15,7],
    
        3
       / 
      9  20
        /  
       15   7
    return its depth = 3

    方法一:采用递归方法:(C++)

    ①如果一棵树只有一个结点,它的深度为1。

    ②如果根结点只有左子树而没有右子树,那么树的深度应该是其左子树的深度加1;同样如果根结点只有右子树而没有左子树,那么树的深度应该是其右子树的深度加1。

    ③如果既有右子树又有左子树,那该树的深度就是其左、右子树深度的较大值再加1。

    1 int maxDepth(TreeNode* root) {
    2         if(!root)
    3             return 0;
    4         int nleft=maxDepth(root->left);
    5         int nright=maxDepth(root->right);
    6         return nleft>nright?nleft+1:nright+1;
    7     }

    Java:

    1 public int maxDepth(TreeNode root) {
    2         if(root==null)
    3             return 0;
    4         int nleft=maxDepth(root.left);
    5         int nright=maxDepth(root.right);
    6         return nleft>nright?nleft+1:nright+1;
    7     }

    方法二:采用迭代方法:利用队列先进先出的特性,将每一层的结点弹出后,再将其左右子树压进队列,直至该层的结点全部弹出(C++)

     1 int maxDepth(TreeNode* root) {
     2         if(!root)
     3             return 0;
     4         int res=0;
     5         queue<TreeNode*> q;
     6         q.push(root);
     7         while(!q.empty()){
     8             res++;
     9             for(int i=q.size();i>0;i--){
    10                 TreeNode* t=q.front();
    11                 q.pop();
    12                 if(t->left)
    13                     q.push(t->left);
    14                 if(t->right)
    15                     q.push(t->right);
    16             }
    17         }
    18         return res;
    19     }

    Java:

     1 public int maxDepth(TreeNode root) {
     2         if(root==null)
     3             return 0;
     4         Queue<TreeNode> m=new LinkedList<>();
     5         m.offer(root);
     6         int res=0;
     7         while(!m.isEmpty()){
     8             res++;
     9             for(int i=m.size();i>0;i--){
    10                 TreeNode t=m.poll();
    11                 if(t.left!=null)
    12                     m.offer(t.left);
    13                 if(t.right!=null)
    14                     m.offer(t.right);
    15             }
    16         }
    17         return res;
    18     }
  • 相关阅读:
    设计模式
    Linux 使用 script 分享
    动态代理中的 UndeclaredThrowableException 以及其他异常
    浅析 Spring 异常处理
    SLAM中的优化理论(二)- 非线性最小二乘
    SLAM中的优化理论(一)—— 线性最小二乘
    卡尔曼滤波器推导与解析
    Python学习(一) —— matplotlib绘制三维轨迹图
    ZED 相机 && ORB-SLAM2安装环境配置与ROS下的调试
    [转载]如何使用USSD命令设置呼叫转移
  • 原文地址:https://www.cnblogs.com/hhhhan1025/p/10641282.html
Copyright © 2011-2022 走看看