La ce te referi mai exact când zici
identifica?
Un arbore este un graf aciclic și conex în care ne alegem un nod pe post rădăcină. Doarece avem un graf aciclic conex, există un unic drum elementar între oricare două noduri. Dacă vrem, putem să și orientăm graful dinspre rădăcină înspre exterior (înspre
frunze).
- descdendent - un nod A se numește descendent al unui nod B dacă și numai dacă A este diferit de B și drumul elementar de la rădăcină la A îl conține pe B
- descdendent direct - un nod A se numește descedendent direct al unui nod B dacă și numai dacă îi este descendent și adiacent
- ascendent - un nod B se numește ascendent al unui nod A dacă și numai dacă A este descendent al lui B
- ascendent direct - un nod B se numește ascendent direct al unui nod A dacă și numai dacă îi este ascdendent și adiacent
Intuitiv, noțiunile de
desendent și
ascendent sunt legate una de alta, un nod
A nu-i poate fi descendent unui nod
B dacă nodul
B nu îi este ascendent lui
A. Și mai intuitiv,
ascendenții unui nod un aceia pe care îi găsești plimbându-te de la nodul tău în sus, înspre rădăcină, deci nodurile care sunt practic
deasupra nodului respectiv. Descendenții, în mod analog, sunt aceia pe care îi găsești
dedesubt.
(imagine wikipedia)Pe exemplul din figura de mai sus o să mă refer la
nodul cu valoarea x ca
nodul x, deoarece valorile sunt unice înafară de valoarea
2, pe care nu o să o folosesc ca să nu dăm în ambiguitate. Deci, avem că, spre exemplu,
11 este
descendent al lui
7 (avem drumul elementar
2 7 6 11). Evident,
7 este
ascendent al lui
11. Un
descdendent direct al lui
7 ar fi
6 (de ce?). Evident,
7 este ascendent direct al lui
6 (iar, de ce?).
Mă îndoiesc că ce-am zis eu aici a făcut prea multă lumină. Dacă nu stăpânești bine noțiunile, recomandarea mea este să îți desenezi chiar tu câțiva arbori și să îți faci câteva exemple pe ei.
Pentru lista de descdenenți, dacă vrei un exemplu în C/C++, depinde cum memorezi arborele. Dacă ai putea da ceva mai multe detalii ar fi super.