Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }