首页
学习
活动
专区
工具
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.9K50
  • 二叉树中的最大路径和

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

    22130

    每日三题-二叉树的最大深度、二叉树中的最大路径和、路径总和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 解法一 暴力 算出以节点为根节点满足条件的路径数 再算出每个节点的再相加

    30940

    二叉树中的最大路径和

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

    1K10

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

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

    73130

    二叉树中的最大路径和

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

    63730

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

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

    28940

    Leetcode No.124 二叉树中的最大路径和

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

    30120
    领券