美文网首页
完全二叉树遍历,并求解分支最大和

完全二叉树遍历,并求解分支最大和

作者: lxr_ | 来源:发表于2022-09-11 14:21 被阅读0次
#include <iostream>
#include <map>
#include <vector>
#include <stack>
using namespace std;

//遍历二叉树每个分支求最大值
int sum = 0;
int MaxValue = 0;
/*
4
2 3 4 5
2 5 2 4

*/

stack<int> sums;

//完全二叉树的前序遍历并求解分支最大和路径
void PreTraverse(vector<int> tree, int index, int n)
{

    if (index > n)                                  //该分支如果访问完成
    {
        if (sum > MaxValue)                         //分支的和是否为最大
        {
            MaxValue = sum;                         //更新最大分支和
        }
        return;
    }
    //cout << tree[index] << " ";
    sum += tree[index];                             //计算每个分支的和
    sums.push(sum);                                 //分支和入栈

    PreTraverse(tree, 2 * index, n);                //左子树
    PreTraverse(tree, 2 * index + 1, n);            //右子树

    sums.pop();                                     //左右子树访问完成后根节点的和出栈
    if (!sums.empty())
    {
        sum = sums.top();                           //上一个结点的和
    }
}
int main(int argc, char** argv)
{
    int n;
    cin >> n;

    int maxNode = 0;

    vector<int> p;

    vector<int> tree;               //初始化一个完全二叉树
    p.resize(n + 1);                    //p
    for (int i = 1; i <= n; i++)
    {
        cin >> p[i];

        if (p[i] > maxNode)
        {
            maxNode = p[i];
        }
    }

    tree.resize(maxNode + 1);           //最多有maxNode个结点,且每一个结点初始化为0

    for (int i = 1; i <= n; i++)
    {
        cin >> tree[p[i]];          //构造完全二叉树
    }

    PreTraverse(tree, 1, maxNode);
    cout << MaxValue << endl;

    return 0;
}

相关文章

  • 完全二叉树遍历,并求解分支最大和

  • 完全二叉树 GO语言实现

    完全二叉树和满二叉树也有很好的性质,有时候会利用它们的特点求解 完全二叉树常用层次遍历。毕竟是最后一层或者次一层才...

  • 关于树的几类计算

    求解方法归纳:(1)求解二叉树中节点个数的方法。非空二叉树上叶子结点数等于双分支结点数加1,即在一颗二叉树中,所有...

  • 面试总结算法

    二叉树镜像 最长回文子串 二叉树层级遍历 整数反转 二叉树先序遍历 二分法 连续子数组的最大和 动态规划 sync...

  • 二叉树

    二叉树 高度 深度真二叉树 满二叉树 完全二叉树 二叉树遍历前序 中序 后序层序遍历 翻转二叉树 递归法...

  • 二叉树-3

    今天解决了人生导师留给我的第一个问题——通过前序遍历和中序遍历序列,求解后序遍历序列。 思路:D&C 对于二叉树,...

  • 数据结构(六)-二叉树

    二叉树的特点是每个节点最多有两个分支,即二叉树中不存在度大于2的结点。 二叉树的遍历 先序遍历(根-左-右) 中序...

  • 记一次Tree的遍历

    统计利用先序遍历创建的二叉树的深度 利用先序递归遍历算法创建二叉树并计算该二叉树的深度。先序递归遍历建立二叉树的方...

  • 算法学习

    ### 实现二叉树以及二叉树遍历数据结构递归比较重要 1.先序遍历 先序遍历,就是先遍历根节点然后再遍历左子树,最...

  • 剑指 Offer 07. 重建二叉树(中等)

    输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含...

网友评论

      本文标题:完全二叉树遍历,并求解分支最大和

      本文链接:https://www.haomeiwen.com/subject/gzaxortx.html