美文网首页
遍历完全二叉树并求每一个子树的权值

遍历完全二叉树并求每一个子树的权值

作者: lxr_ | 来源:发表于2022-09-03 19:25 被阅读0次
#include <iostream>
#include <vector>
using namespace std;

//3 
//1 2 3
//1 2
//1 3
//求一个数的因子数量
vector<int> weight;
//递归遍历完全二叉树
int traverse(vector<int> arr, int i, int n)
{
    if (i > n)
    {
        return 1;
    }
    int root = arr[i];

    int left = traverse(arr, 2 * i, n);                     //遍历左子树
    int right = traverse(arr, 2 * i + 1, n);                    //遍历右子树

    weight.push_back(root * left * right);
    return root * left * right;
}

//求因子数
void yinzi()
{
    int count = 0;
    for (int i = 0; i < weight.size(); i++)
    {
        for (int j = 1; j * j <= weight[i]; j++)
        {
            if (weight[i] % j == 0)
            {
                count++;
            }

        }
    }
    cout << count << endl;
}
int main2(int argc, char** argv)
{
    int n;
    cin >> n;                               //结点
    vector<int> arr;
    arr.resize(n + 1);
    for (int i = 1; i <= n; i++)
    {
        cin >> arr[i];
    }
    vector < vector<int>> edge;             //边
    edge.resize(n - 1);
    for (int i = 0; i < n - 1; i++)
    {
        edge[i].resize(2);
        cin >> edge[i][0] >> edge[i][1];
    }
    traverse(arr, 1, n);                    //遍历
    yinzi();
    return 0;
}

相关文章

网友评论

      本文标题:遍历完全二叉树并求每一个子树的权值

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