public void createNodeList(Dictionary<char, double> rfdict) { this.nodes = new List<Node>(); foreach (KeyValuePair<char, double> kvp in rfdict.OrderBy(key => key.Value)) { Node test = new Node(kvp.Key, kvp.Value); this.nodes.Add(test); } }
public void addDictfromTree(Node current) { if (current == null) return; if (current.isSign == true) { this.dict.Add(current.character[0], current.code); } addDictfromTree(current.left); addDictfromTree(current.right); }
public void generateCode(string c, Node current) { if (current == null) return; if (current.left == null && current.right == null) { current.code = c; current.isSign = true; return; } generateCode(c + "0", current.left); generateCode(c + "1", current.right); }
public void createTree() { while (nodes.Count > 1) { this.nodes.Sort(); Node node1 = nodes[0]; this.nodes.RemoveAt(0); Node node2 = nodes[0]; this.nodes.RemoveAt(0); Node parent = new Node(node1, node2); this.nodes.Add(parent); } root = nodes[0]; }
public Node(Node node1, Node node2) { if (node1.rf < node2.rf) { this.left = node2; this.right = node1; } else { this.left = node1; this.right = node2; } this.rf = left.rf + right.rf; this.character = left.character + right.character; this.left.parent = this; this.right.parent = this; }
public void printTree(Node current) { if (current == null) return; if (current.isSign == true) { string test = current.character; Console.WriteLine("Char:\t" + test + "\nCode:\t" + current.code + "\n"); } printTree(current.left); printTree(current.right); }