543. Diameter of Binary Tree

来源:互联网 发布:淘宝车商城 编辑:程序博客网 时间:2024/06/05 18:17

Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root.

Example:
Given a binary tree

          1         / \        2   3       / \           4   5    

Return 3, which is the length of the path [4,2,1,3] or [5,2,1,3].

Note: The length of path between two nodes is represented by the number of edges between them.
这道题求二叉树的直径,并告诉了我们直径就是两点之间的最远距离,根据题目中的例子也不难理解题意。我们再来仔细观察例子中的那两个最长路径[4,2,1,3] 和 [5,2,1,3],我们转换一种角度来看,是不是其实就是根结点1的左右两个子树的深度之和再加1呢。那么我们只要对每一个结点求出其左右子树深度之和,再加上1就可以更新结果res了。为了减少重复计算,我们用哈希表建立每个结点和其深度之间的映射,这样某个结点的深度之前计算过了,就不用再次计算了.

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {      int diameter = 0;      public int diameterOfBinaryTree(TreeNode root) {          getDepth(root);          return diameter;      }      public int getDepth(TreeNode root){          if (root == null)              return -1;          int left = getDepth(root.left);          int right = getDepth(root.right);          int temp = left + right + 2;          if (temp > diameter)              diameter = temp;          return Math.max(left, right) + 1;      }  }  
原创粉丝点击