zoukankan      html  css  js  c++  java
  • 二叉树最大路径和

    1. 题目描述

    输入一个二叉树层次遍历的结果,输出这个二叉树最大路径和。路径不一定从根节点开始和叶子节点结束。只要是连续的路径就可以。

    输入:[-10,9,20,null,null,15,7]
    
       -10
       / 
      9  20
        /  
       15   7
    
    输出:42

    2. 代码

    首先将一个数组还原成一个二叉树。

    然后根绝二叉树的根节点返回最大路径和。

    class Main{
        public static void main(String[] args){
            Object[] layers = new Object[]{-10,9,20,null,null,15,7};
            Object[] layers2 = new Object[]{-4,1,3};
            TreeNode root = CovertToNode(layers2, 0);
            System.out.println(new Main().maxPathSum(root));
        }
        //把输入的一个数组转成二叉树,返回根节点
        private static TreeNode CovertToNode(Object[] layers, int index) {
            if(index >= layers.length){
                return null;
            }
            Object o = layers[index];
            if(o == null){
                return null;
            }else{
                TreeNode node = new TreeNode((Integer)layers[index]);
                node.left = CovertToNode(layers, 2 * index + 1);
                node.right = CovertToNode(layers, 2 * index + 2);
                return node;
            }
        }
        //begin
        public int max = Integer.MIN_VALUE;
        public int maxPathSum(TreeNode root){
            maxGain(root);
            return max;
        }
        private int maxGain(TreeNode root) {    //表示经过节点root的最大路径和
            if(root == null){
                return 0;
            }
            int left = Math.max(maxGain(root.left), 0); //root左侧节点的路径最大值
            int right = Math.max(maxGain(root.right), 0);
            int value = left + root.val + right;
            max = Math.max(max, value);
            return root.val + Math.max(left, right);
        }
        //end
    }
    //定义一个二叉树节点
    class TreeNode{
        int val;
        TreeNode left;
        TreeNode right;
        public TreeNode(int val){
            this.val = val;
            this.left = null;
            this.right = null;
        }
    }
    

      

  • 相关阅读:
    HTTP协议超级详解
    css面试题(一)
    win10开机启动项管理
    Notion快捷键
    [C++]std::sort()函数使用总结
    配置环境变量时java命令可以使用,javac不能使用
    安卓4:修改系统默认颜色
    vue 安装sass-loader 提示python等
    vue echarts 柱状图 变色 显示
    k8s-生产环境部署django项目k8s-dashboard管理系统
  • 原文地址:https://www.cnblogs.com/lyuwalle/p/13910358.html
Copyright © 2011-2022 走看看