Example #1
0
        public T KeyByIndex(int index)
        {
            RBOrderedTreeNode <T> node = GetByOrder(index);

            if (node != null)
            {
                return(node.Key);
            }

            return(default(T));
        }
Example #2
0
        ///<summary>
        ///Get order index of item
        ///This operation is O(logN) operation
        ///</summary>
        public int GetOrder(RBOrderedTreeNode <T> aItem)
        {
            RBTreeNodeBase <T, RBOrderedNodeParam> node = aItem;
            int idx = node.mParam.mRank;

            while (true)
            {
                if (node.mParent == null)
                {
                    break;
                }

                if (node.mParent.mRight == node)
                {
                    idx += node.mParent.mParam.mRank;
                }
                node = node.mParent;
            }
            return(idx - 1);
        }