二叉树最大路径和

从顶点到叶节点的一条路径,使得路径上节点的值得和最大。

如图所见,一个二叉树,各结点值是int类型,现在要找出各结点之和最大的路径。

如图可知,此二叉树有三条路径:[1,2,4], [1,2,5], [1,3]

结点之和最大的是[1,2,5],我们最终的目标就是要找到这条路径!

分析下先序遍历的路径:1->2->4->5->3

问题求解

  • 当发现到达叶子结点时,确认一条路径,并将这路径中各结点相加得到sum,然后退回至父结点再次寻找另其它叶子结点,重复之前的操作,并与上次的sum进行比较...
  • 如此重复下去,直至所有路径都遍历完成,sum保存的就是结点之和最大的值。
  • sum的路径用栈保存,栈顶叶子结点,栈底根结点
struct TreeNode {
    TreeNode *left;
    TreeNode *right;
    int value;
};

vector<TreeNode *> path;

// cur:当前节点
int solve(TreeNode *cur) {
    if (cur->left && !cur->right) {
        path.push_back(cur->left);
        return cur->value + solve(cur->left);
    } else if (!cur->left && cur->right) {
        path.push_back(cur->right);
        return cur->value + solve(cur->right);
    } else if (cur->left && cur->right) {
        int a = solve(cur->left);
        int b = solve(cur->right);
        if (a > b) {
            path.push_back(cur->left);
            return cur->value + a;
        } else {
            path.push_back(cur->right);
            return cur->value + b;
        }
    } else if (!cur->left && !cur->right) {
        return cur->value;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 数据结构和算法--二叉树的实现 几种二叉树 1、二叉树 和普通的树相比,二叉树有如下特点: 每个结点最多只有两棵子...
    sunhaiyu阅读 11,590评论 0 14
  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 9,965评论 1 31
  • 课程介绍 先修课:概率统计,程序设计实习,集合论与图论 后续课:算法分析与设计,编译原理,操作系统,数据库概论,人...
    ShellyWhen阅读 6,953评论 0 3
  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 14,594评论 0 25
  • 昨天周五今天周六,完成了人生中的一个梦想,突然很空虚,很无聊。 这就是我们需要的人生吗?
    一梦十年_d092阅读 1,639评论 1 1

友情链接更多精彩内容