Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

В бинарном дереве пересекаются ветки

440
14 апреля 2010 года
[FENIX]
83 / / 29.01.2007
Народ, помогите пжлста составить алгоритм, который бы задавал такие координаты узлов бинарного дерева, чтобы ни ветки, ни узлы не пересекались (Язык C#).

Код:
//Вот тут узлам присваиваются координаты
public void Obhod(Huffman_Node root,int MyRecX, int MyRecY, int dx, bool flag)
        {
            if (root != null)
            {
                root.CoordX = MyRecX;
                root.CoordY = MyRecY;
 
                dx -= 10;
                if (flag)
                {
                    Obhod(root.Left, MyRecX - dx, MyRecY + 50, dx,false);
                    Obhod(root.Right, MyRecX + dx, MyRecY + 70, dx,false);
                }
                if (!flag)
                {
                    Obhod(root.Left, MyRecX - dx, MyRecY + 70, dx,true);
                    Obhod(root.Right, MyRecX + dx, MyRecY + 50, dx,true);
                }
            }
        }


Код:
//Тут на форме рисуется узел, и закрашивается желтым цветом
public void Obhod2(Huffman_Node root,System.Drawing.Graphics form, System.Drawing.Pen pen)
        {
            if (root != null)
            {
                System.Drawing.Rectangle rect = new System.Drawing.Rectangle(root.CoordX - 10, root.CoordY - 10, 25, 25);
                form.DrawEllipse(pen, rect);
 
               
                form.FillEllipse(System.Drawing.Brushes.Yellow, rect);
               
               
                Obhod2(root.Left, form, pen);
                Obhod2(root.Right, form, pen);
            }
        }



Код:
//Тут на форме рисуются ветки дерева
public void Obhod3(Huffman_Node root, System.Drawing.Graphics form, System.Drawing.Pen pen)
        {
            if (root != null)
            {
                if (root.Left != null)
                    form.DrawLine(pen, new System.Drawing.Point(root.CoordX, root.CoordY+15), new System.Drawing.Point(root.Left.CoordX, root.Left.CoordY-10));
                if (root.Right != null)
                    form.DrawLine(pen, new System.Drawing.Point(root.CoordX, root.CoordY+15), new System.Drawing.Point(root.Right.CoordX, root.Right.CoordY-10));
 
                Obhod3(root.Left, form, pen);
                Obhod3(root.Right, form, pen);
            }
        }


Вызов:
 
Код:
int diff = 70;
             int X = 330;
             int Y = 50;
           
            Tree.Obhod(Tree.Root, X, Y, diff, true);
           
            Tree.Obhod2(Tree.Root, mainForm, myPen);
            Tree.Obhod3(Tree.Root, mainForm, myPen);


Помогите исправить метод Obhod
14
14 апреля 2010 года
Phodopus
3.3K / / 19.06.2008
Нарисуйте как в "Проводнике"
30K
14 апреля 2010 года
cpentyc
85 / / 23.02.2010
а вот это не поможет? http://sources.codenet.ru/file/3553/%E4%E5%F0%E5%E2%EE.zip
вобщем как я делал. рисовал ветку сверху вниз. определяешь ширину графического поля.

Цитата:


у1=0; // считая верхний левый угол 0,0
х1= pictureBox1.Width/2;
//определяешь смещение по х и по у
dx= pictureBox1.Width/4;
dy=75;//какой хочешь
while(! конец ветки)
{
if(влево){x2=x1-dx;}else{x2=x1+dx;}
y2=y1+dy;
dx/=2;
// рисуем линию если надо кружочек в в вершине
x1=x2;
y1=y2;
}

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог