Beispiel #1
0
        internal static FlattenerNode GetNodeByVisibleIndex(FlattenerNode root, int index)
        {
            root.TotalCount();
            var flattenerNode = root;

            while (true)
            {
                for (;
                     flattenerNode._left == null || index >= flattenerNode._left._totalCount;
                     flattenerNode = flattenerNode._right)
                {
                    if (flattenerNode._left != null)
                    {
                        index -= flattenerNode._left._totalCount;
                    }
                    if (flattenerNode.IsVisible)
                    {
                        if (index == 0)
                        {
                            return(flattenerNode);
                        }
                        --index;
                    }
                }

                flattenerNode = flattenerNode._left;
            }
        }
Beispiel #2
0
        private int TotalCount()
        {
            if (_totalCount > 0)
            {
                return(_totalCount);
            }
            var num = IsVisible ? 1 : 0;

            if (_left != null)
            {
                num += _left.TotalCount();
            }
            if (_right != null)
            {
                num += _right.TotalCount();
            }
            _totalCount = num;
            return(_totalCount);
        }