/// <summary> /// 作为某个结点的左孩子结点插入 /// </summary> /// <param name="x">要插入的父节点</param> /// <param name="e">结点的值</param> /// <returns>插入的结点的值</returns> public BinNode <T> InsertAsLc(BinNode <T> x, T e) { Size++; var leftChild = x.InsertAsLc(e); UpdateHeightAbove(x); return(leftChild); }
/// <summary> /// 插入结点,不考虑重复key /// <remarks> /// 使用Virtual修饰函数修饰,使之能够AVL 和Splay树等能够重载 /// </remarks> /// </summary> /// <param name="e"></param> /// <returns> /// 返回插入的结点的位置() /// </returns> public virtual BinNode <T> Insert(T e) { var x = Search(e); //如果查找到某一个已经存在的 if (x != null) { return(x); } //如果插入的是根节点 if (Hot == null) { Root = new BinNode <T>(e); Size++; UpdateHeightAbove(Root); return(Root); } //如果不是跟结点 x = Lt(e, Hot.Data) ? Hot.InsertAsLc(e) : Hot.InsertAsRc(e); Size++; UpdateHeightAbove(x); return(x); }