13.01.2015 Views

Объектно-ориентированное программирование на С++ - eDrive

Объектно-ориентированное программирование на С++ - eDrive

Объектно-ориентированное программирование на С++ - eDrive

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

58<br />

Можно использовать любой порядок заполнения узлов, но обычно этот<br />

порядок зависит от з<strong>на</strong>чений данных в них: узлы с меньшим з<strong>на</strong>чением присоединяют<br />

слева, а с большим з<strong>на</strong>чением – справа. Чтобы обойти дерево, отметив<br />

каждый узел один раз, используют один из трех способов (рис. 1). При<br />

прямом порядке обхода (depth-first traversal) («просмотре в глубину») движение<br />

<strong>на</strong>чи<strong>на</strong>ется от корня и выполняется от родителей с<strong>на</strong>чала к левым потомкам,<br />

а затем к правым. При обратном порядке (breadth-first traversal) обход<br />

<strong>на</strong>чи<strong>на</strong>ется с листьев и выполняется от потомков к родителям слева <strong>на</strong>право,<br />

завершаясь в корне. Наиболее распространенный обход в симметричном порядке<br />

(simmetrical traversal) <strong>на</strong>правлен от левого потомка через родителя к<br />

правому потомку от листьев к корню.<br />

Пример двоичного дерева:<br />

struct vTree { char *data; vTree *left; vTree *right; };<br />

vTree *root;<br />

void Search (vTree **tree, const char *s);<br />

AnsiString Process (vTree *node);<br />

AnsiString InOrder (vTree *node);<br />

void MyTree () {<br />

char s[128];<br />

// можно сортировать любые массивы<br />

randomize();<br />

for (int i=1; idata = strdup (s); p–>left = 0; p–>right = 0; *tree = p;<br />

}<br />

else {<br />

p = *tree;<br />

cmpResult = strcmp (s, p–>data); // сравнение строк<br />

if (cmpResultleft, s);<br />

else if (cmpResult>0) Search (&p–>right, s);

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!