`

二叉树中寻找节点和最大值的路径(C++ 实现)

 
阅读更多
/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
 
 // rule in result vector during iteration:
 // single path: 0;   ----> v0
 // cross path: 1;    ----> v1
 // single point: 2;  ----> v2
 // lonely path: 3;   ----> v3
 
class Solution {
public:
    int maxPathSum(TreeNode *root) {
        vector<int> *rv = mps(root);
        int r = miv(*rv);
        delete rv;
        return r;
    }
    
    vector<int> *mps(TreeNode *root) {
        if(!root) return NULL;
        
        vector<int> *ret = new vector<int>;
        
        vector<int> *lr = mps(root->left);
        vector<int> *rr = mps(root->right);
        
        vector<int> v0;
        v0.push_back(root->val);
        if(lr) v0.push_back(root->val + (*lr)[0]);
        if(rr) v0.push_back(root->val + (*rr)[0]);
        
        vector<int> v1;
        if(lr) v1.push_back((*lr)[1]);
        if(rr) v1.push_back((*rr)[1]);
        if(lr && rr) v1.push_back((*lr)[0] + (*rr)[0] + root->val);
        
        vector<int> v2;
        v2.push_back(root->val);
        if(lr) v2.push_back((*lr)[2]);
        if(rr) v2.push_back((*rr)[2]);
        
        vector<int> v3;
        if(lr) {
            v3.push_back((*lr)[0]);
            v3.push_back((*lr)[3]);
        }
        if(rr) {
            v3.push_back((*rr)[0]);
            v3.push_back((*rr)[3]);
        } 
        
        ret->push_back(miv(v0));
        ret->push_back(miv(v1));
        ret->push_back(miv(v2));
        ret->push_back(miv(v3));
        
        delete lr;
        delete rr;
        
        return ret;
    }
    
    // max in vector
    int miv(vector<int> l) {
        int m = INT_MIN;
        vector<int>::const_iterator cit = l.begin();
        while(cit != l.end()) {
            m = *cit > m ? *cit : m;
            cit ++;
        }
        return m;
    }
};

 

分享到:
评论

相关推荐

    二叉树中的两节点中的最大距离

    在实际编程实现时,C++提供了`queue`容器来实现队列,`struct TreeNode`来表示二叉树节点,通常包含一个整型值(节点的值)和两个指向子节点的指针。使用递归或迭代的方法遍历树,根据题目描述,本题需要在VC++环境...

    查找二叉树中最大结点的C++源代码

    这里我们使用后序遍历来寻找最大值,因为后序遍历在没有遍历完整个右子树之前不会返回当前节点的值,这样可以确保我们找到的是全局的最大值,而不是局部的最大值。 ```cpp TreeNode* findMax(TreeNode* root) { if...

    C++数据结构-计算二叉树最大的宽度

    在C++中,这可以通过创建一个结构体或类来实现: ```cpp struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; ``` 计算二叉树最大宽度的...

    寻找树中两叶子节点之间的最长路径

    代码中可能会包括定义二叉树节点的数据结构,实现BFS的函数,以及用于测试的主函数等部分。 在实际编程中,需要注意以下几点: - 使用队列进行BFS,每次处理队首元素。 - 使用哈希表存储节点的最长路径信息,以便在...

    求二叉树节点的最大距离

    代码实现中,定义了一个`NODE`结构体来表示二叉树节点,包含节点值`chValue`,左右孩子节点`pLeft`和`pRight`,以及两个整数变量`nMaxLeft`和`nMaxRight`分别表示左右子树中的最大距离。同时,定义了一个全局变量`...

    二叉树常用算法 c++

    在C++中,我们可以定义一个二叉树节点类,包含节点值、左右子节点指针,并提供遍历、插入和删除等成员函数。例如: ```cpp class TreeNode { public: int val; TreeNode* left; TreeNode* right; TreeNode(int...

    C++实现二叉树(链式存储)

    本文将详细介绍使用C++语言实现的链式存储二叉树的设计和实现原理。 一、链式存储二叉树的基本概念 链式存储二叉树是一种使用链表存储节点的二叉树实现方式。每个节点包含一个值和两个指针,分别指向其左子节点和...

    用C++实现的二叉树链表,包含二叉树所有操作

    在C++中,我们可以使用结构体或类来定义二叉树节点,每个节点包括一个值、指向左子节点的指针和指向右子节点的指针。 ```cpp struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : ...

    二叉树 C++实现

    在C++中实现二叉树,我们需要定义一个表示节点的结构体或类,然后实现各种操作,如插入节点、删除节点和查找节点。下面将详细介绍这些知识点。 首先,我们定义一个二叉树节点。每个节点包含两个指针,分别指向左子...

    平衡二叉树c++模版

    在C++中实现平衡二叉树通常会采用AVL树或红黑树等经典结构。AVL树是一种自平衡的二叉搜索树,它的每个节点的两个子树的高度最大差别为1,这保证了在最坏情况下,AVL树的操作时间复杂度为O(logn)。而红黑树则是一种弱...

    堆与二叉树C++实现

    `Travel` 函数是一个通用的遍历函数,用于打印二叉树的所有节点,而`PrOrder` 和 `InOrder` 分别实现了前序遍历和中序遍历,它们是二叉树遍历的经典方法。 `MaxHeap` 类中还有其他辅助方法,如`ConditionOrder` 和 ...

    数据结构数和二叉树(C/C++)

    节点的度是指它拥有的子节点数量,而树的度是所有节点度中的最大值。 节点有多种类型,包括叶子节点(没有子节点的节点)、分支节点(有子节点的节点)、度为0的节点等。节点之间的关系也有特定的术语,如孩子节点...

    mfc二叉树的实现,涉及到增加节点等运算

    在MFC中实现二叉树,我们需要定义一个表示节点的类,如`CNode`,包含节点值、左子节点指针和右子节点指针。此外,还需要一个二叉树类`CBinaryTree`,管理整个树的结构。`CBinaryTree`类可能包含一个指向根节点的指针...

    删除二叉树的某个结点源代码

    下面是一个C++语言实现的二叉树节点删除的示例代码: ```cpp struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class Solution { ...

    数据结构中求二叉树的高度和宽度C++代码

    ### 数据结构中求二叉树的高度和宽度C++代码 #### 概述 本文将详细介绍如何使用C++来实现计算二叉树的高度和宽度的方法。文章中的代码适用于初学者学习和理解二叉树的基本操作。 #### 二叉树简介 二叉树是一种...

    数据结构中二叉树操作C++代码

    根据给定的信息,本文将对数据结构中的二叉树及其在C++中的实现进行详细的解析。主要内容包括二叉树的基本定义、二叉树节点结构、创建二叉树的方法、以及几种常用的二叉树操作(如遍历、计算高度、叶子节点数量等)...

    C++链表实现最大堆、二叉树、霍夫曼编码

    在C++中,链表可以用来表示非连续内存空间中的二叉树节点,每个节点包含数据、左孩子和右孩子的指针。二叉树广泛应用于查找、排序和数据压缩等场景。例如,二叉搜索树是一种特殊的二叉树,其中每个节点的左子树只...

    数据结构课程设计 二叉树 (C++)

    在C++中,我们可以使用结构体或类来表示二叉树的节点,包括节点的数据元素以及指向左右子节点的指针。 首先,我们需要定义一个二叉树节点的结构体或类。这个结构可能如下: ```cpp struct TreeNode { int data; ...

    C++二叉树非递归后序遍历

    在计算机科学中,二叉树是一种基础的数据结构,它由节点构成,每个节点最多有两个子节点,通常分为左子节点和右子节点。在C++编程中,理解并实现二叉树的各种遍历方法是非常重要的技能。本篇将重点探讨非递归方式...

    数据结构 C语言建立二叉树

    在C语言中,我们首先需要定义一个二叉树节点结构体。这个结构体通常包含三个部分:节点的数据、指向左子节点的指针和指向右子节点的指针。以下是一个简单的定义: ```c typedef struct TreeNode { int data; ...

Global site tag (gtag.js) - Google Analytics