赞
踩
Problem: 104. 二叉树的最大深度
在涉及到二叉树的递归时,大多数时候均是会用到二叉树的前、中、后序遍历,而这三种遍历的方式其实也是对应了不同时间对当前树中节点的处理
思路1:先序加后序
我们维护一个全局的int变量res用于记录最大的深度,维护int变量depth用于记录每个节点当前子树的深度,具体的先序到达一个节点是depth++,后序退出一个节点是depth–;到达根节点时更新res
思路2:后序遍历分解问题
我们每次统计当前节点的左右子树的而最大深度,由于要获取左右子树的最大深度,所以要在退出一个节点时(即要利用后序遍历)去获取当前节点的最大深度,最后返回到获取整个二叉树的最大深度
思路1:
O ( n ) O(n) O(n);其中 n n n为二叉树的节点的个数
O ( n ) O(n) O(n)
思路2:
O ( n ) O(n) O(n)
O ( n ) O(n) O(n)
思路1:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { int res = 0; int depth = 0; /** * Maximum Depth of Binary Tree * * @param root The root of binary tree * @return int */ public int maxDepth(TreeNode root) { traverse(root); return res; } /** * DFS concrete implementation function * * @param root The root of binary tree */ private void traverse(TreeNode root) { if (root == null) { res = Math.max(res, depth); return; } depth++; traverse(root.left); traverse(root.right); depth--; } }
思路2:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { /** * Maximum Depth of Binary Tree * * @param root The root of binary tree * @return int */ public int maxDepth(TreeNode root) { if (root == null) { return 0; } int leftMax = maxDepth(root.left); int rightMax = maxDepth(root.right); int res = Math.max(leftMax, rightMax) + 1; return res; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。