//Вот тут узлам присваиваются координаты
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 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);
}
}
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);
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
Нарисуйте как в "Проводнике"
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;
}
а вот это не поможет?
вобщем как я делал. рисовал ветку сверху вниз. определяешь ширину графического поля.
Цитата:
у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;
}