假设要得到G的编码,查7号结点的parent域的值,是8,再去查8的左孩子右孩子域的值,他是左孩子,标注0
8号结点的parent是10号,8是左孩子,记0......继续往上找,
有多少个结点做多少次,写成循环,有n个结点,i的值从1开始,i<=n,都需要求出他们的哈夫曼编码,每次都找当前节点的双亲,然后看他是左孩子还是右孩子,分出0和1,直到双亲的parent为0,就找到根结点,可以结束
while,用f表示parent的值,只要不为0,就要反复回溯到双亲
在这个过程中,n个字符需要n个由0和1组成的字符串,所以我们需要由字符串构成的数组,即二维的字符数组,HC是头指针
把中间得到的0和1,用字符数组cd存起来,有n个元素,得到的哈夫曼树最高有n-1层,因为一开始两个结点合并,他们是在同一层,所以最高n-1层,即编码最多有n-1位,所以数组长度为n-1位就够了
我们这里把他当作字符串来看待,多一个位置,用来存放字符串结束标志\0,然后循环从下标为1开始,这里数组是要倒着放,所以数组的下标从n-1开始
要有这样一个循环,从1到n,反复的找双亲结点
结束了,就给字符串数组HC[i]分配一个空间HC[i]=new char[n-start]
然后将我们临时存储在cd数组中从start开始复制到HC里就行了