首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C++中寻找二叉树的最大高度路径

在C++中寻找二叉树的最大高度路径可以通过递归的方式实现。下面是一个示例代码:

代码语言:txt
复制
#include <iostream>
#include <algorithm>

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

int findMaxHeight(TreeNode* root) {
    if (root == nullptr) {
        return 0;
    }
    
    int leftHeight = findMaxHeight(root->left);
    int rightHeight = findMaxHeight(root->right);
    
    return std::max(leftHeight, rightHeight) + 1;
}

int main() {
    // 构建二叉树
    TreeNode* root = new TreeNode(1);
    root->left = new TreeNode(2);
    root->right = new TreeNode(3);
    root->left->left = new TreeNode(4);
    root->left->right = new TreeNode(5);
    
    int maxHeight = findMaxHeight(root);
    std::cout << "The maximum height of the binary tree is: " << maxHeight << std::endl;
    
    // 释放内存
    delete root->left->left;
    delete root->left->right;
    delete root->left;
    delete root->right;
    delete root;
    
    return 0;
}

这段代码中,我们定义了一个TreeNode结构体表示二叉树的节点,其中包含一个整数值val,以及左右子节点的指针leftrightfindMaxHeight函数使用递归的方式计算二叉树的最大高度。如果当前节点为空,返回0;否则,分别计算左子树和右子树的最大高度,并取较大值加1作为当前节点的高度。最后,在main函数中构建一个二叉树,并调用findMaxHeight函数计算最大高度。

这个问题中没有明确要求推荐腾讯云相关产品,因此不提供相关链接。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

寻找矩阵路径

前言 给定一个矩阵和一个字符串,如何从矩阵寻找出这个字符串矩阵路径?本文就跟大家分享下如何使用回溯法来解决这个问题,欢迎各位感兴趣开发者阅读本文。...实现思路 我们先从题目给出条件入手,逐步分析得出思路,矩阵就是一个二维数组,字符串可以切割成一个数组,我们要做就是按顺序取出字符串每个字符,判断其是否矩阵,能否组成一条完整路径出来。...举例分析 现有一个矩阵(如下所示),有一个字符串bfce,我们需要从矩阵找出这个字符串矩阵中所连接起来路径。...2,2 位置元素是e,与目标值匹配,所有字符寻找完毕,该路径存在与矩阵 保存每一步已找到元素矩阵索引 [2,2]位置 [1,2]位置 [1,1]位置 [0,1]位置 最终路径为:[0][1]...实现代码 我们分析出思路后,接下来我们来看下实现代码,代码分为2部分: 主函数,用于参数规则判断、寻找切入点、返回找到路径 寻找路径函数,用于矩阵寻找每一个字符 主函数 主函数接受2个参数:路径矩阵

1.1K40

计算二叉树最大高度

二叉树高度有两种定义: 从根节点到最深节点最长路径节点数。 从根到最深节点最长路径边数。 在这篇文章,我们采用第一种定义。例如,下面这棵树高度是3: ?...计算二叉树高度有两种方法,一种是使用二叉树层级遍历法,一种是使用递归法。...层级遍历法计算高度 我们可以使用二叉树层级遍历法来计算二叉树高度,这种方式主要步骤是: 创建空队列保存二叉树每一层节点,初始化标识二叉树高度变量height为0 一层一层地遍历二叉树,每向下遍历一层.../** * 二叉树高度:使用递归,时间复杂度O(n) * * @param root * 二叉树根节点 * @return 二叉树高度 */ public...= null) { // 左子树与右子树高度最大值加上当前节点 return Math.max(height(root.left), height(root.right)) + 1;

4.7K50

二叉树最大路径

思路 (递归,树遍历) 路径 在这道题目中,路径是指从树某个节点开始,沿着树边走,走到某个节点为止,路过所有节点集合。路径权值和是指路径中所有节点权值总和。...用最高节点可以将整条路径分为两部分:从该节点向左子树延伸路径,和从该节点向右子树延伸部分。 如图所示: 我们可以递归遍历整棵树,递归时维护从每个子树从最高节点开始往下延伸最大路径和。...对于每个子树最高节点,递归计算完左右子树后,我们将左右子树维护两条最大路径,和该点拼接起来,就可以得到以这个点为最高节点子树最大路径。...(这条路径一定是:左子树路径->最高节点->右子树路径) 然后维护从这个点往下延伸最大路径:从左右子树路径中选择权值大一条延伸即可。...(只能从左右子树之间选一条路径) 最后整颗树最大路径和为: 根节点值+左子树最大路径和+右子树最大路径和,即left_max + right_max + root->val 注意: 如果某条路径之和小于

15130

每日三题-二叉树最大深度、二叉树最大路径和、路径总和III

二叉树最大深度 二叉树最大路径路径总和III 补上11月12日每日三题 二叉树最大深度 解法一 递归 class Solution { public int maxDepth...root.left); int right = maxDepth(root.right); return Math.max(left,right)+1; } } 二叉树最大路径和...解法一 暴力递归 cur,left,right以及cur父节点parent 第一种情况:以cur节点为根节点得到最大(cur+left+right) 第二种情况:以parent为根节点得到最大...(parent+cur+Math.max(left,right)) 这里只能取一边因为要构成路径 class Solution { int res = Integer.MIN_VALUE;...root父节点使用 return cur + Math.max(left,right); } } 路径总和III 解法一 暴力 算出以节点为根节点满足条件路径数 再算出每个节点再相加

29640

LeetCode 实战:「图解」二叉树最大路径

题目描述 给定一个非空二叉树,返回其最大路径和。 本题中,路径被定义为一条从树任意节点出发,达到任意节点序列。该路径 至少包含一个节点 ,且不一定经过根节点。...题目要求出一个二叉树最大路径和,路径和就是把一条路径上面节点值加起来,这一题难点在于路径方向不固定,只要是任意两点间通路都算是有效路径。...我们再回过头来看这道题,递归遍历过程,对于当前节点,其路径可以是路径尾,路径头(假设路径是从上到下,其实在这道题中,没有头尾概念),也可以是路径一个节点。 那怎么判断呢?...表示左子树到 root 最大路径,right 表示右子树到 root 最大路径: root 和左右路径形成路径(left - root - right) root 和左路径形成路径(left...但是需要注意是,我们返回时候,第一种情况是不能返回,因为对于上一层节点来说,其无法形成有效路径,因此我们只需要将 2,3,4 最大值返回即可,当然,更新全局答案时候,这 4 种情况都需要考虑在内

69830

二叉树最大路径

1.递归法思路: 题目要求最大路径和,对于一个二叉树节点,是不是先计算左子树和右子树最大路径和,然后加上自己值,这样就得出新最大路径和了?所以说这里其实可以套后序遍历模板框架。...int right = max(0, sideMax(root->right)); //看是否需要更新当前二叉树最大路径和 ans = max(ans,...即,一条从父节点延伸下来路径,能在当前子树获得最大收益。...分为三种情况: 1.路径停在当前子树根节点,在这个子树收益:root.val 2.走入左子树,在这个子树最大收益:root.val + dfs(root.left) 3.走入右子树,在这个子树最大收益...子树内部路径要包含根节点 由题意可知,最大路径和可能产生于局部子树,如下图左一。所以每递归一个子树,都求一下当前子树内部最大路径和,见下图右一,从中比较出最大

60230

精读《算法题 - 二叉树最大路径和》

今天我们看一道 leetcode hard 难度题目:二叉树最大路径和。 题目 二叉树 路径 被定义为一条节点序列,序列每对相邻节点之间都存在一条边。...同一个节点在一条路径序列 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径各节点值总和。 给你一个二叉树根节点 root ,返回其 最大路径和 。...也就是说,计算最大路径和时(重要内容字体加粗!): 经过该点最大路径和,要同时考虑该点 + 左右子树最大贡献,也就是此时路径会形成类似倒扣 U 型。...最后,在从根节点递归寻找子树最大贡献时,就可以顺便计算出最大路径和,一定程度上是 “目标的副产物”,甚至可以怀疑该题是思考子树最大贡献时,逆向推导出来副产物。...讨论地址是:精读《算法 - 二叉树最大路径和》· Issue #504 · dt-fe/weekly 如果你想参与讨论,请 点击这里,每周都有新主题,周末或周一发布。

18740

二叉树最大路径

题目 给定一个非空二叉树,返回其最大路径和。 本题中,路径被定义为一条从树任意节点出发,达到任意节点序列。该路径至少包含一个节点,且不一定经过根节点。...我们很容易想到left最大路径和right最大路径求完之后更新最终结果状态。这时候我们就会去思考递归子问题代码怎么去构造。...会发现面临两个关键问题: 递归需要记录下来左右子树经过根节点最大值,以便计算后面的父节点,对应代码即: return Math.max(leftSum, rightSum) + root.val; 递归还要记录下不经过根节点最大值...回头再看看我们第1点,return 回去是为了父节点下一次计算;而第2点,不经过根节点最大值,我们只需要记录下来即可,不需要return ,因为它并不涉及后面的计算。...,对应解析第2点 maxSum = Math.max(leftSum + rightSum + root.val, maxSum); // 这个分支最大值是多少

99910

Leetcode No.124 二叉树最大路径

路径和 是路径各节点值总和。 给你一个二叉树根节点 root ,返回其 最大路径和 。...-1000 <= Node.val <= 1000 二、解题思路 首先,考虑实现一个简化函数 maxGain(node),该函数计算二叉树一个节点最大贡献值,具体而言,就是以该节点为根节点子树寻找以该节点为起点一条路径...对于二叉树一个节点,该节点最大路径和取决于该节点值与该节点左右子节点最大贡献值,如果子节点最大贡献值为正,则计入该节点最大路径和,否则不计入该节点最大路径和。...维护一个全局变量 maxSum 存储最大路径和,递归过程更新 maxSum 值,最后得到 maxSum 值即为二叉树最大路径和。...空间复杂度:O(N),其中 N 是二叉树节点个数。空间复杂度主要取决于递归调用层数,最大层数等于二叉树高度,最坏情况下,二叉树高度等于二叉树节点个数。

27720

Binary Tree Maximum Path Sum二叉树最大路径

题目大意 求一棵二叉树最大路径和。该路径可以是二叉树某一节点到树任意一个节点所经过路径,不允许重复经过一个节点,不必经过根节点。...https://shenjie1993.gitbooks.io/leetcode-python/124%20Binary%20Tree%20Maximum%20Path%20Sum.html 我们现在要求最大路径和...,那么就要分别得到左右两条路径最大和。...而左路径最大和为左节点值加上它左右路径较大路径和,右路径最大和为右节点值加上它左右路径较大路径和。 注意:如果某条子路径左右节点为负,直接置为0,等于不走这个节点。...root.val + left + right) # print self.maxSum return max(left, right) + root.val 总结 难思路

83820
领券