zoukankan      html  css  js  c++  java
  • Leecode no.124 二叉树中的最大路径和

    package tree;

    /**
    * 二叉树中最大路径之和
    *
    * 路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。
    *
    * 路径和 是路径中各节点值的总和。
    *
    * 给你一个二叉树的根节点 root ,返回其 最大路径和 。
    *
    * @author Tang
    *
    */
    public class MaxPathSum {

    int max = 0;

    /**
    * 利用二叉树后序遍历
    * 利用递归 最优解思想
    * 从根结点开始,每次计算该节点的最大值 max(左子树+根节点, 右子树+根节点)
    *
    * @param root
    * @return
    */
    public int maxPathSum(TreeNode root) {
    if(root == null){
    return 0;
    }
    max = root.data;
    maxOnePath(root);
    return max;
    }

    /**
    * 某一个节点最大和
    * @param node
    * @return
    */
    private int maxOnePath(TreeNode node){
    if(node == null){
    return 0;
    }
    int left = node.data + maxOnePath(node.leftChild);
    int right = node.data + maxOnePath(node.rightChild);
    int value = node.data + maxOnePath(node.leftChild) + maxOnePath(node.rightChild);
    if(left > max){
    max = left;
    }
    if(right > max){
    max = right;
    }
    if(value > max){
    max = value;
    }
    return node.data + Math.max(maxOnePath(node.leftChild), maxOnePath(node.rightChild));
    }


    public static void main(String[] args) {
    TreeNode node1 = new TreeNode(1);
    TreeNode node2 = new TreeNode(2);
    TreeNode node3 = new TreeNode(3);
    TreeNode node4 = new TreeNode(4);
    TreeNode node5 = new TreeNode(5);
    TreeNode node6 = new TreeNode(6);

    node1.leftChild = node2;
    node1.rightChild = node3;
    node2.rightChild = node5;
    node2.leftChild = node4;
    node3.leftChild = node6;
    TreeNode root = node1;
    System.out.println(new MaxPathSum().maxPathSum(root));


    }


    }
  • 相关阅读:
    JS中原型链的理解
    CSS3的笔记总结
    那些牛掰的 HTML5的API(二)
    初识 HTML5(一)
    jQuery基础知识点(下)
    jQuery基础知识点(DOM操作)
    jQuery基础知识点(上)
    [译]GC专家系列2:Java 垃圾回收的监控
    [译]GC专家系列1: 理解Java垃圾回收
    [译]深入理解JVM
  • 原文地址:https://www.cnblogs.com/ttaall/p/14990596.html
Copyright © 2011-2022 走看看