543. Diameter of Binary Tree

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.

題意:

找出一個樹的最大直徑,直徑的例子如下:

          1
         / \
        2   3
       / \     
      4   5    
最大直徑的路徑可為:4->2->1->3或5->2->1->3,這兩個直徑都是3,故返回3

題解:

需要維護一個全局最大直徑,然後再從根結點往下做下去,如下面步驟:

  1. 取得左子樹的最大深度與右子樹的最大深度(遞歸的做)
  2. 將左右子樹的最大子樹相加作為當前最大直徑,然後維護全局最大直徑
  3. 得到當前最大深度(左子樹的最大深度或右子樹的最大深度的比較哪個大)
  4. 返回當前最大深度
最後再返回一個全局最大深度

package LeetCode.Easy;

import LeetCode.Dependencies.TreeNode;

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class DiameterOfBinaryTree {
    public int diameterOfBinaryTree(TreeNode root) {
        helper(root);
        return global_max_path;
    }
    
    int global_max_path = 0;
    int helper(TreeNode root) {
        if(root == null)
            return 0;
        
        //取得左右子樹的最大深度
        int left = helper(root.left);
        int right = helper(root.right);
        
        //left + right 為左右路徑相加(最長路徑)
        global_max_path = Math.max(global_max_path, left + right);
        
        //取得當前最大深度
        int cur_max_depth = Math.max(left, right) + 1;
        
        return cur_max_depth;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值