求出二叉树的最小权值

小蓝想知道,对于一棵有 2021 个结点的二叉树,树的权值最小可能是多少?c++

c++没怎么了解过,给您在GPT上闻了一下,请参考。

对于一棵有
n 个节点的二叉树,它可能的最小权值为 n−1。这是因为每一条边都需要至少一个权值,而一棵有 n 个节点的二叉树恰好有 n−1 条边。

以下是 C++ 的实现代码:

cpp

#include <iostream>

int main() {
    int n = 2021;
    int min_weight = n - 1;
    std::cout << "The minimum weight of a binary tree with " << n << " nodes is " << min_weight << std::endl;
    return 0;
}

输出结果为:

The minimum weight of a binary tree with 2021 nodes is 2020
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/260508
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:C++找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小(也可能没有鞍点)
  • 除此之外, 这篇博客: C++找出二维数组中的鞍点中的 题目:找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列最小(也可能没有鞍点) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 记录一下,加深印象;
    note:通过声明一个布尔变量flag来判断这个数是否存在;

    int main()
    {
      bool flag;                               //声明一个布尔变量;
      const int n=3,m=3;                       //定义常变量行和列
      int i,j;
      int a[n][m];
      int k,max,maxj;                         //maxj为该行最大值的列标
    
      cout<<"请输入一个3乘3的二维数组:";
      for(i=0; i<n; i++)
      {
        for(j=0; j<m; j++)
        {
          cin>>a[i][j];
        }
      }
      
      for(i=0; i<n; i++)                       //求出该行的最大值的列下标;
      {
        k=a[i][0];
        max=0;
        for(j=0; j<m; j++)
        {
          if(a[i][j]>k)
          {
            max=a[i][j];
            maxj=j;  
          }
        }
         flag=true;                           //默认flag为真
         for(k=0; k<n; k++)                   //判断该行是否是其所在列的最小值;
         { 
            if(max>a[k][maxj])
            {
              flag=false;                    //如果不是最小,继续下一行(i=1)的内循环
            }
         }
    
       if(flag)                              //如果是最小,则输出
        {
          cout<<"a["<<i<<"]["<<maxj<<"]="<<max;
          cout<<endl;
          break;
        }
      }
      if(!flag)
      {
        cout<<"这个数不存在!";
      }
      return 0;
    }
    
  • 您还可以看一下 林男老师的小学生c++趣味编程入门视频教程 少儿C十十信息学奥赛竞赛网课课程中的 化简法——纯小数转化为最简分数小节, 巩固相关知识点