数据结构二叉树
#include<stdio.h>
struct node{
int weight; //权值
int parent; //双亲节点
int lchild,rchild; //左孩子右孩子
};
main()
{
struct node ht[1000];
int w[1000]; //权值
int n; //共几个叶子节点
int i,j,x1,x2,m1,m2; //x求剩余的最小权值,m权值下标
printf("\ninput:节点个数n:");
scanf("%d",&n); //输入叶子节点的个数
printf("\ninput:叶子的权值yuezi:");
for(i=0;i<n;i++)
scanf("%d",&w[i]); //获取值权值,暂时存放w数组中
for(i=0;i<n;i++)
{
ht[i].weight=w[i]; //权值复制
ht[i].parent=-1; //没有参与
ht[i].lchild=-1;
ht[i].rchild=-1;
}
for(i=0;i<n-1;i++) //i<=n-2;i++
{
x1=x2=100; //和x1x2比较找最小值,次小值
m1=m2=-1; //最小值,次小值 权值下标
for(j=0;j<n+i;j++)
{
if(ht[j].parent==-1 && ht[j].weight<x1)
{
x2=x1;
m2=m1;
x1=ht[j].weight; //最小值
m1=j; //权值下标
}else if(ht[j].parent==-1 && ht[j].weight<x2)
{
x2=ht[j].weight;
m2=j;
}
}
ht[n+i].weight=ht[m1].weight+ht[m2].weight; //x1+x2
ht[n+i].parent=-1; //有没有使用过
ht[n+i].lchild=m1; //下标
ht[n+i].rchild=m2;
ht[m1].parent=n+i;
ht[m2].parent=n+i;
}
for(i=0;i<2*n-1;i++) //输出
{
printf("\n");
printf("\nht[%d].weight=%d",i,ht[i].weight);
printf("\nht[%d].parent=%d",i,ht[i].parent);
printf("\nht[%d].lchild=%d",i,ht[i].lchild);
printf("\nht[%d].rchild=%d",i,ht[i].rchild);
}
}
本文来自博客园,作者:JackieDYH,转载请注明原文链接:https://www.cnblogs.com/JackieDYH/p/17634987.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现