zoukankan      html  css  js  c++  java
  • LeetCode 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.

    思路分析:这题比較简单。关于树的题目通常都能够用递归解决,这题也不例外。递归解法的思路是返回左右子树中深度较大的子树深度加1作为自己的深度。每递归调用一次深度加1.

    递归解法(DFS递归搜索)

    /**
     * Definition for binary tree
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public int maxDepth(TreeNode root) {
            if(root == null) return 0;
            return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
        }
    }

    非递归的解法须要借助队列实现,BFS搜索树节点,首先root入队列。然后不断从队列头取出节点,将该节点的左右孩子(假设有)入队列。直到队列为空。注意维护当前层次的节点数和下一层次的节点数。这样在每次换层的时候,把层次计数器level加1,最后返回level层次数作为结果就可以。因为每一个node訪问一次。时间复杂度O(n)。

    非递归解法(借助队列BFS)

    /**
     * Definition for binary tree
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public int maxDepth(TreeNode root) {
            if(root == null) return 0;
            LinkedList<TreeNode> treeNodeQueue = new LinkedList<TreeNode>();
            int level = 0;
            treeNodeQueue.add(root);
            int curLevelNum = 1;//# of nodes in the current level
            int nextLevelNum = 0;//# of nodes in the next level
            while(!treeNodeQueue.isEmpty()){
                TreeNode curNode = treeNodeQueue.poll();//find and remove; different from peek
                curLevelNum--;
                if(curNode.left != null){
                    treeNodeQueue.add(curNode.left);
                    nextLevelNum++;
                }
                if(curNode.right != null){
                    treeNodeQueue.add(curNode.right);
                    nextLevelNum++;
                }
                if(curLevelNum == 0){
                    level++;
                    curLevelNum = nextLevelNum;
                    nextLevelNum = 0;//added a level
                }
            }
            return level;
        }
    }


  • 相关阅读:
    ReLU激活函数:简单之美
    逻辑回归(Logistic Regression)推导
    机器学习之视频推荐
    TensorFlow OOM when allocating tensor with shape[5000,384707]
    工银亚洲账户激活
    微信小程序之多行文本省略号
    关于微信小程序:scroll-view,backgroundTextStyle
    css之box-sizing属性(css3中的新属性)
    css之max-width属性
    css中的display属性之li元素
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5210845.html
Copyright © 2011-2022 走看看