对AVL树和红黑树的个人理解
都说编程算法很重要,可真没见几个.NET程序员研究算法的。这些日子非主流地研究了一些小算法,红黑树和AVL树算是其中复杂的了,但实际也就二三百行代码。悲催的是,网上根本找不到C#的理想版本(包括国外网站),寥寥几个,要么有错,要么非主流的实现方式。 所谓主流方式,就是用表二叉排序树节点TreeNode类的属性,除了左右子节点和值,还包括父节点。 /// <typeparam name="T">Type of the node.</typeparam> /// <typeparam name="K">Type of the node value.</typeparam> class TreeNode<T,K> where T:TreeNode<T,K> where K: IComparable<K> { public T LeftChild { get; set; } public T RightChild { get; set; } public T Parent { get; set; } public K Value { get; set; } } 不同二叉排序树间,为了保证查找性能,在插入和删除时,有不同的调整步骤。表示二叉排序树用抽象类Tree,我们可以把插入和删除节点做成内部虚方法,供公共方法调用(参数是要添加或删除的值)。 比如删除: public bool