Example #1
0
        ///
        /// Находит и возвращает первый узел с заданным значением. Если значение
        /// не найдено, возвращает null. Также возвращает родителя найденного узла (или null)
        /// для использования в методе Remove.
        ///
        public AvlTreeNode <T> FindWithParent(T value, out AvlTreeNode <T> parent)
        {
            // Попробуем найти значение в дереве.
            AvlTreeNode <T> current = Head;

            parent = null;

            // До тех пор, пока не нашли...
            while (current != null)
            {
                int result = current.CompareTo(value);

                if (result > 0)
                {
                    // Если искомое значение меньше, идем налево.
                    parent  = current;
                    current = current.Left;
                }
                else if (result < 0)
                {
                    // Если искомое значение больше, идем направо.
                    parent  = current;
                    current = current.Right;
                }
                else
                {
                    // Если равны, то останавливаемся
                    break;
                }
            }

            return(current);
        }
Example #2
0
        private AvlTreeNode <T> Find(T value)
        {
            AvlTreeNode <T> current = Head; // помещаем текущий элемент в корень дерева

            // Пока текщий узел на пустой
            while (current != null)
            {
                int result = current.CompareTo(value); // сравнение значения текущего элемента с искомым значением

                if (result > 0)
                {
                    // Если значение меньшне текущего - переход влево
                    current = current.Left;
                }
                else if (result < 0)
                {
                    // Если значение больше текщего - переход вправо
                    current = current.Right;
                }
                else
                {
                    // Элемент найден
                    break;
                }
            }

            return(current);
        }