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

#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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。