javascript 哈夫曼树构造

  function Node(data) {
    this.data = data;
    this.left = null;
    this.right = null;
  }

  Array.prototype.createHufuTree = function() {
    var nodes = [];
    /*初始化结点*/
    for (var i = 0; i < this.length; i++) {
      nodes.push(new Node(this[i]));
    }
    while (nodes.length > 1) {
      nodes.sort(function(a, b) {
        return a.data - b.data;
      });
      var one = nodes.shift();
      var two = nodes.shift();
      var sum = one.data + two.data;
      /*构造结点*/
      var root = new Node(sum);
      root.left = new Node(one);
      root.right = new Node(two);
      nodes.unshift(root);
    }
    return nodes[0];
  }

  /*测试用例*/
  var datasarray = [1, 54, 23, 64, 53, 87, 97];

  var res = datasarray.createHufuTree();

时间: 2024-10-28 15:14:54

javascript 哈夫曼树构造的相关文章

哈夫曼树的构造

#include<iostream> #include<string> using namespace std; struct ElemType { char date; int weight; }; struct HTNode { char data; int weight; int parent,lchild,rchild; string code; }; HTNode *createTree(ElemType *w,int n)//哈夫曼树构造 { HTNode *ht=ne

哈夫曼树与哈夫曼编码

哈夫曼树与哈夫曼编码 术语: i)路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径. 路径中分支的数目称为路径长度.若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1. ii)结点的权及带权路径长度 若对树中的每个结点赋给一个有着某种含义的数值,则这个数值称为该结点的权. 结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积. iii)树的带权路径长度 树的带权路径长度:所有叶子结点的带权路径长度之和,记为WPL. 先了解一下

数据结构之哈夫曼树

#include <iostream> #include <iomanip> #include <string> using namespace std; typedef struct { string name; int weight; int parent, lchild, rchild; int visited; //设置visited选项来表示每次查找最小权值后的删除,0代表未删除,1表示删除 }HTNode,*HuffmanTree; int Min(Huff

哈夫曼树树状输出

1 #include "stdio.h" 2 #include "malloc.h" 3 4 #define maxlen 100 5 #define infinity 65535 6 7 struct bnode 8 { 9 int data;//数据 10 bnode *lchild,*rchild; 11 bool flags;//使用标志 12 }; 13 14 bnode *tree[maxlen]; 15 16 void initialization(i

赫夫曼树的构建、编码、译码解析

当你開始看这篇博文的时候.我相信你对树及二叉树的基本概念已有所了解.我在这里就不再赘述. 我们主要对赫 夫曼树的特点.构建.编码.译码做一个具体的介绍,并附有代码,全部函数代码都通过了測试.我不保证全部代码是最优的(毕竟是我一个人苦思冥想出来的,我相信在大家的集思广益之下还有优化的空间),但我保证全部代码是正确的. 一.赫夫曼树的特点 赫夫曼树又称作最优二叉树,是一类带权路径长度最短的树. 首先给出路径和路径长度的概念.从树中一个节点到 还有一个节点之间的分支构成这两个节点之间的路径.路径上的分

C# 哈夫曼树

C# 哈夫曼树 下面的例子用C#实现了基本的哈夫曼树 //哈夫曼树构造的基本思想,从list中取出最小的两个节点,构造出他们的父节点, //然后将这两个节点从list中删除,将他们的父节点插入list中,左孩子code设置为0,右孩子code设置为1, //直到list为空. //接下来遍历以list中节点为根节点的树. public  class HuffmanTree { private List<HuffmanNode> nodes=new List<HuffmanNode>

【算法总结】哈夫曼树和哈夫曼编码

一.哈夫曼树 1. 哈夫曼树也称最优二叉树. 叶子节点的权值是对叶子节点赋予的一个有意义的数值量. 设二叉树具有 n 个带权值的叶子结点,从根节点到各个叶子结点的路径长度与相应叶子结点权值的乘积之和叫做二叉树的带权路径长度. 给定一组具有确定权值的叶子结点,可以构造处不同的二叉树,将其中带权路径长度最小的二叉树称为哈夫曼树. 2. 基本思想: 初始化:由给定的 n 个权值 $\left\{ \omega_{1},\omega_{2},\cdots ,\omega_{n}\right\}$构造 n

温故而知新, 哈夫曼树(Huffman tree)

哈夫曼树定义:在一棵二叉树中,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称哈夫曼树. 如何构建哈夫曼树: 一般可以按如下步骤构建: 假设有n个权值W1,W2,...,Wn,将这些权值看成是有n棵树的森林(每棵树仅有一个节点), 则哈夫曼树的构造规则为: 1,在森林中选出2个根节点的权值最小的树合并为一棵新树,作为左右子树,且新树的根节点权值为其左右子树根节点权值之和. 2,从森林中删除这两棵树,同时把新树加入到森林中. 3,重复1,2步骤,直到森林中只有一棵树为止,此树就是哈夫曼树.

javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题

赫夫曼树及其应用 赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,有着广泛的应用. 最优二叉树(Huffman树) 1 基本概念 ① 结点路径:从树中一个结点到另一个结点的之间的分支构成这两个结点之间的路径. ② 路径长度:结点路径上的分支数目称为路径长度. ③ 树的路径长度:从树根到每一个结点的路径长度之和. 以下图为例: A到F :结点路径 AEF : 路径长度(即边的数目) 2 : 树的路径长度:3*1+5*2+2*3=19: ④ 结点的带权路径长度:从该结点的到树的根结