Code: Alles auswählen.
1.) Finde Wurzel des Baums (
2.) perform aufbau_baum using wurzel
changing itab.
3.) sort itab by zaehler.
form aufbau_baum
using p_wurzel type itab_line_type
changing p_itab type itab_table_type.
statics: static_zaehler type i.
data: wa type itab_line_type.
* Aktuellen Wert erstmal mit Zähler versehen
add 1 to static_zaehler.
read table p_itab into wa with key eintrag = wurzel-eintrag.
eintrag-zaehler = static_zaehler.
modify p_itab from wa index sy-tabix.
* Jetzt rekursiv runterhangeln
loop at p_itab into wa where ( Unterknoten zu p_wurzel ).
perform aufbau_baum using wa
changing p_itab.
endloop
Code: Alles auswählen.
REPORT.
CONSTANTS: c_anzahl TYPE i VALUE 100.
TYPES: BEGIN OF ty_tree,
node_key TYPE tv_nodekey,
relatkey TYPE tv_nodekey,
feld1,
feld2,
* etc
END OF ty_tree,
tyt_tree TYPE STANDARD TABLE OF ty_tree.
DATA: t_tree TYPE tyt_tree,
tmp_tree TYPE tyt_tree,
wa_tree TYPE ty_tree,
wa2_tree TYPE ty_tree,
zaehler TYPE i,
zaehler2 TYPE i,
anzahl TYPE i.
FIELD-SYMBOLS: <tree> TYPE ty_tree.
END-OF-SELECTION.
* Knoten füllen
DO c_anzahl TIMES.
CLEAR wa_tree.
WRITE sy-index TO wa_tree-node_key NO-GROUPING.
APPEND wa_tree TO tmp_tree.
ENDDO.
zaehler = 1.zaehler2 = 1.
* Chaotischer aber konsistenter Baum
DO c_anzahl TIMES.
READ TABLE tmp_tree INTO wa_tree INDEX zaehler.
zaehler = ( zaehler + 6 ) mod c_anzahl + 1.
IF sy-index = 1.
APPEND wa_tree TO t_tree.
ADD 1 TO anzahl.
CONTINUE.
ENDIF.
zaehler2 = ( zaehler2 + 2 ) mod anzahl + 1.
READ TABLE t_tree INTO wa2_tree INDEX zaehler2.
ADD 1 TO anzahl.
wa_tree-relatkey = wa2_tree-node_key.
APPEND wa_tree TO t_tree.
ENDDO.
SORT t_tree BY node_key.
WRITE:/ 'Vorher (chaotisch)'.
LOOP AT t_tree INTO wa_tree.
WRITE:/ wa_tree-node_key,
wa_tree-relatkey.
ENDLOOP.
ULINE.
****** Oberhalb nur zum Erzeugen des chaotischen Baums ***************
PERFORM sort_tree CHANGING t_tree.
WRITE:/ 'Nachher (weniger chaotisch)'.
LOOP AT t_tree INTO wa_tree.
WRITE:/ wa_tree-node_key,
wa_tree-relatkey.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form sort_tree
*&---------------------------------------------------------------------*
FORM sort_tree CHANGING p_tree TYPE tyt_tree.
DATA: sort_tree TYPE tyt_tree.
LOOP AT p_tree INTO wa_tree WHERE relatkey = space. " Die wurzeln
PERFORM build_tree USING wa_tree
p_tree
CHANGING sort_tree.
ENDLOOP.
p_tree = sort_tree.
ENDFORM. " sort_tree
*&---------------------------------------------------------------------*
*& Form build_tree
*&---------------------------------------------------------------------*
FORM build_tree USING wa_tree TYPE ty_tree
in_tree TYPE tyt_tree
CHANGING out_tree TYPE tyt_tree.
DATA: tmp_tree TYPE ty_tree.
APPEND wa_tree TO out_tree.
LOOP AT in_tree INTO tmp_tree WHERE relatkey = wa_tree-node_key.
PERFORM build_tree USING tmp_tree
in_tree
CHANGING out_tree.
ENDLOOP.
ENDFORM. " build_tree