бинарные деревья

Модератор: Absurd

chew
Сообщения: 3
Зарегистрирован: 16 ноя 2004, 11:09

17 ноя 2004, 13:36

Ниже приведён текст программы на C#.
Она подсчитывает кол-во вершин графа.

После получения этого числа надо использовать:
Теорема.
Бинарный граф явл. правильным тогда и только тогда,
когда кол-во его вершин равно 2**k-1,
где k - высота графа.
Док-во: почти очевидно :)

Если получено число 'N' и оно имеет такой вид, то граф правильный.
-------------------------------------------------------------------------------------
using System;

namespace chewProject1
{
public class BTree
{
public BTree v1;
public BTree v2;
public string nameNode;
public BTree(string name)
{
nameNode = name;
}

public static int CountNodes(BTree bTree)
{ // выдаёт кол-во вершин бинарного графа
// NB! рекурсивный метод!
int cnt=1; // текущая вершина

if ( (bTree.v1 != null) )
{// левая ветка
cnt += CountNodes(bTree.v1);
}
if ( (bTree.v2 != null) )
{// правая ветка
cnt += CountNodes(bTree.v2);
}

if ( (bTree.v1 == null) && (bTree.v2 == null) )
{// лист
return (1);
}
return (cnt);
}

public static void Main()
{
// заполняем дерево
BTree c1= new BTree("c1"); // лист
BTree c2= new BTree("c2"); // лист
BTree b1= new BTree("b1");
b1.v1 = c1;
b1.v2 = c2;
BTree d1= new BTree("d1"); // лист
BTree d2= new BTree("d2"); // лист
BTree b2= new BTree("b2");
b2.v1 = d1;
b2.v2 = d2;

BTree a1= new BTree("a1"); // корень
a1.v1 = b1;
a1.v2 = b2;

int n= BTree.CountNodes(a1);
Console.WriteLine("CountNodes: {0}", n);
// если n=2**k -1, то граф полный.
}
}
}
-------------------------------------------------------------------------------------
Я думаю, так (медведь).
michael
Сообщения: 116
Зарегистрирован: 15 июл 2004, 13:06
Откуда: ISRAEL (ранее - из Литвы)
Контактная информация:

17 ноя 2004, 15:14

kod horowiy. No nado v TOY je funkzie vi4isliat' visotu dereva.
Ya v ot4aenie :cry:
versus
Сообщения: 45
Зарегистрирован: 12 май 2004, 01:37

17 ноя 2004, 15:14

> Бинарный граф явл. правильным тогда и только тогда,
> когда кол-во его вершин равно 2**k-1,

ну вот, я же сказал велосипед переизобретаем :)
michael
Сообщения: 116
Зарегистрирован: 15 июл 2004, 13:06
Откуда: ISRAEL (ранее - из Литвы)
Контактная информация:

17 ноя 2004, 15:19

ya znaiu 4to 2**k-1 no problema 4to visotu ya doljen pods4itat' v toy je funkzie
versus
Сообщения: 45
Зарегистрирован: 12 май 2004, 01:37

17 ноя 2004, 15:31

michael, ну тебе же уже все дали!
количество узлов посчитать можешь? ( Amount )
log2(от этого количества) посчитать можешь? ( Height )
сравнить количество узлов Amount с 2*Height - 1 можешь?
ну так в чем тогда проблема? в том что CountNodes рекурсивный? Так его легко можно переписать без рекурсии.
michael
Сообщения: 116
Зарегистрирован: 15 июл 2004, 13:06
Откуда: ISRAEL (ранее - из Литвы)
Контактная информация:

20 ноя 2004, 12:49

spasibo -razorabralsia
Ответить