''' mbinary ######################################################################### # File : sort.py # Author: mbinary # Mail: zhuheqin1@gmail.com # Blog: https://mbinary.xyz # Github: https://github.com/mbinary # Created Time: 2018-07-05 17:18 # Description: ######################################################################### ''' from functools import total_ordering @total_ordering class node: def __init__(self, val, left=None, right=None): self.val = val self.frequency = 1 self.left = left self.right = right def __lt__(self, x): return self.val < x.val def __eq__(self, x): return self.val == x.val def inc(self): self.val += 1 def dec(self): self.val -= 1 def incFreq(self): self.frequency += 1 def decFreq(self): self.frequency -= 1 class binaryTree: def __init__(self, reverse=True): self.reverse = reverse self.data = None def cmp(self, n1, n2): ret = 0 if n1 < n2: ret = -1 if n1 > n2: ret = 1 return ret * -1 if self.reverse else ret def addNode(self, nd): def _add(prt, chd): if self.cmp(prt, chd) == 0: prt.incFreq() return if self.cmp(prt, chd) < 0: if not isinstance(nd, node): nd = node(nd) if not self.root: self.root = node(val) else: if self.root == val: self.root.incfreq() else: cur = self.root def build(self, lst): dic = {} for i in lst: if i in dic: dic[i].incFreq() else: dic[i] = node(i) self.data = list(dic.values())