public override IList <T> Sort <T>(IList <T> source, Func <T, T, bool> com) { var result = new List <T>(source); var maxHeap = new BinanyHeap <T>(result, com); return(maxHeap.Sort()); }
public BinaryTree <Frequencytem <T> > Compute <T>(IList <Frequencytem <T> > items) { //头一次碰到普通BinaryTree应用。 var queue = new BinanyHeap <BinaryTreeNode <Frequencytem <T> > > ( items.Select(i => new BinaryTreeNode <Frequencytem <T> >() { Data = i }).ToList() , (a, b) => a.Data.Frequency < b.Data.Frequency ); for (int i = 1; i < items.Count; i++) { var childRoot = new BinaryTreeNode <Frequencytem <T> >(); childRoot.Left = queue.Extract(); childRoot.Right = queue.Extract(); childRoot.Data = new Frequencytem <T>() { Frequency = childRoot.Left.Data.Frequency + childRoot.Right.Data.Frequency }; queue.Insert(childRoot); } //也是头一次用 var oneBit = new BitArray(1, true); var zeroBit = new BitArray(1, false); var tree = new BinaryTree <Frequencytem <T> >(queue.Extract()); tree.Preorder(tree.Root, (node) => { var code = node.Data.Code; if (node == tree.Root) { code = new BitArray(0); } if (node.Left != null) { node.Left.Data.Code = zeroBit.Append(code); } if (node.Right != null) { node.Right.Data.Code = oneBit.Append(code); } } ); return(tree); }
private BinanyHeap <int> CreateBinanyMinHeap1() { var heap = new BinanyHeap <int>(_testData1, (a, b) => a < b); return(heap); }