zoukankan      html  css  js  c++  java
  • LeetCode 腾讯精选50题--二叉树中的最大路径和

    二叉树中的最大路径和

    题目描述

    给定一个非空二叉树,返回器最大路径和,路径指一条从任意节点出发,到达任意节点的序列,该路径至少包含一个节点,且不一定经过根节点

    解题思路

    树这一类数据结构我还不是很熟悉,需要更进一步的学习,以下思路来自于题解:
    根据题意可知,一条最大的路径存在两种可能:

    1. 存在一个节点,一条最大路径等于该节点的左右子树中路径较大的一颗子树,加上它自己后向其父节点回溯
    2. 存在一个节点,一条最大路径包含其左右子树与其本身,不会再向父节点回溯

    代码实现

    package algorithm.tree;
    public class MaxRoadLength {
    
        private int num = 0;
        public int maxPathSum(TreeNode root) {
    
            num = root.val;
            calculate(root);
            return num;
        }
    
        private int calculate(TreeNode root){
    
            if(root == null){
                return 0;
            }
            int leftLength = Math.max(0,calculate(root.left)); //递归获取左子树中的最大路径
            int rightLength = Math.max(0,calculate(root.right)); //递归获取右子树中的最大路径
    
            num = Math.max(num,root.val+leftLength+rightLength); //计算第二种情况下的路径长度,即左子树长度+右子树长度+节点本身的长度
            return Math.max(leftLength,rightLength)+root.val;//计算第一种情况下的路径长度,去左右子树中路径长的加上节点本身并向父节点回溯
        }
    }
    
  • 相关阅读:
    Mac + Python3 安装scrapy
    Pyqt4+Eric6+python2.7.13(windows)
    js基础⑥
    python模块之os,sys
    Python模块之random
    Python模块之PIL
    js基础⑤
    js基础④
    js基础③
    centOS目录结构详细版
  • 原文地址:https://www.cnblogs.com/Kaithy-Rookie/p/11348517.html
Copyright © 2011-2022 走看看