鱼C论坛

 找回密码
 立即注册
查看: 3994|回复: 10

请求帮助,实现用数组形式存储二叉树!!!

[复制链接]
匿名鱼油
匿名鱼油  发表于 2015-11-19 11:15:34 |阅读模式
2鱼币
本帖最后由 匿名 于 2016-3-23 16:18 编辑

。。

回复

使用道具 举报

发表于 2015-11-19 11:19:48 | 显示全部楼层
....过来瞧瞧哦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-19 11:22:30 | 显示全部楼层
dps521 发表于 2015-11-19 11:19
....过来瞧瞧哦。

呵呵,谢谢哈,如果有实现代码就更好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-19 13:18:17 | 显示全部楼层
jessica1 发表于 2015-11-19 11:22
呵呵,谢谢哈,如果有实现代码就更好了
dps521 发表于 2015-11-19 11:19
....过来瞧瞧哦。

呵呵,谢谢哈,如果有实现代码就更好了
IMG_20151119_130740.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-29 12:52:37 | 显示全部楼层
过来看看  一起学习一起研究一下:smile:smile:smile:smile
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2015-12-23 20:26:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-26 19:36:04 | 显示全部楼层
如果二叉树的最大层次是n,那就开辟一个2^N大小的数组
约定
a[i]的子节点是a[2*i]和a[2*i+1]
a[i]的父节点是a[i/2]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-4 12:37:58 | 显示全部楼层
我把我的哈夫曼编码建树的代码放下面你看一下大概就可以理解了~

typedef struct
{    char ch;
    int weight;
    int parent,lchild,rchild;
}HTNode,*HuffmanTree;
void CreatHuffmanTree(HuffmanTree & HT, int n)
{
        HT = (HuffmanTree)malloc(sizeof(HTNode) * (2*n+2));
        for (int i = 1; i <= n; i++)
    {
        cin >> (HT + i)->ch >> (HT + i)->weight;
        (HT + i)->parent = 0;
    }
    int i, j = 0, m1, n1, p;
    HuffmanTree s1=NULL, s2=NULL, P=NULL;
    while (j < n - 1)
    {
        int x = 0;
        for (i = 1; i <= n + j; i++)
        {
            if ((HT+i)->parent == 0)
            
            {
                if (x == 1)
                {
                    s2 = (HT+i);
                    n1 = i;
                    break;
                }
                if (x == 0)
                {
                    s1 = (HT + i),
                    x++;
                        m1 = i;
                }
            }
        }
        if (s2->weight < s1->weight)
        {
            P = s2, p = n1;
            s2 = s1, n1 = m1;
            s1 = P, m1 = p;
        }
        i++;
        for (i; i <= n + j; i++)   
        {
            if (HT[i].parent == 0)
            {
               if (HT[i].weight < s2->weight)
                   s2 = (HT + i), n1 = i;
               
               if (s2->weight < s1->weight)
               {
                   P = s2, p = n1;
                   s2 = s1, n1 = m1;
                   s1 = P, m1 = p;
               }
            }
        }

        HT[n + j+1].weight = HT[m1].weight + HT[n1].weight;
        HT[n + j+1].lchild = m1;
        HT[n + j+1].rchild = n1;
        HT[n + j+1].parent = 0;
        HT[m1].parent = HT[n1].parent = n + j+1;
        j++;
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-4 12:38:33 | 显示全部楼层
小碎流星 发表于 2022-7-4 12:37
我把我的哈夫曼编码建树的代码放下面你看一下大概就可以理解了~

typedef struct

需要注释版的可以留言跟我说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-7 19:34:32 | 显示全部楼层
有两种形式:
1.二维数组(宽度为三)存储,每行对应一个节点,三个数分别是左儿子下标,数据,右儿子下标
2.一维数组存储,每个元素对应一个节点
若该节点编号是n,则其父节点为n/2(向下取整),子节点是2*n和2*n+1,数据是a[n]的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-8 19:44:33 | 显示全部楼层
小碎流星 发表于 2022-7-4 12:37
我把我的哈夫曼编码建树的代码放下面你看一下大概就可以理解了~

typedef struct

审题啊
他问的是数组存二叉树
不是指针节点存哈夫曼树
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 23:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表