Algorithm การสร้าง Tree


CreateTree (Tree, ele)

{ if (ele > Tree->infor) if (Tree->rigth <> null ) CreateTree (Tree->rigth, ele); else insert (Tree, ele); else if (Tree->left <> null ) CreateTree (Tree->left, ele); else insert (Tree, ele); } อีกรูปแบบ

CreateTree(root)

{ do { getData(x); if(x!='$') { new(newNode); newNode->infor = x; newNode->L = newNode->R = null; if(root == Null) { root = newNode; } else { dumy = root; flag = 1; while(flag==1) { if(x > dumy->infor) { if(dumy->R != Null) { dumy = Rdumy->R; } else { dumy->R = newNode; flag = 0; } } else { if(dumy->L != Null) { dumy = Rdumy->L; } else { dumy->L = newNode; flag = 0; } } } } } } while(x!='$'); return root; }

Algorithm การเยี่ยม Node


Inorder (Tree) แบบ NonRecursive

Inorder (Tree)

{ while(Tree) { while(Tree <> null ) { pushstack(Tree); Tree =Tree->left; } if (top = 0) exit //return else { popstack(Tree); display(Tree->infor); Tree =Tree->rigth; } } }

Inorder (Tree) แบบ Recursive

ReInorder (Tree)

{ if (Tree = null ) display("Emptry Tree"); else { if (Tree->left <> null ) ReInorder (Tree->left); display(Tree->infor); if (Tree->rigth <> null ) ReInorder (Tree->rigth); } }


Preorder (Tree) แบบ NonRecursive

Preorder (Tree)

{ if (Tree = null ) display("Emptry Tree"); else { pushstack(Tree); while(Top <> null ) { popstack(p); while(p <> null) { display(p->infor); if (p->rigth <> null ) pushstack(p->rigth); p = p->left; } } } }

Preorder (Tree) แบบ Recursive

RePreorder (Tree)

{ if (Tree = null ) display("Emptry Tree"); else { display(Tree->infor); if (Tree->left <> null ) Preorder (Tree->left); if (Tree->rigth <> null ) Preorder (Tree->rigth); } }


Inorder (Tree) แบบ NonRecursive (ยากมาก)

Postorder (Tree)

{ if (Tree = null ) display("Emptry Tree"); else { p = tree; pushstack(null,0); Loop: while(p <> null ) { d =0; pushstack(p,d); p = p->left; } popstack(p,d); while(p <> null ) { if (d =0) { d =1; pushstack(p,d); p = p->rigth; goto Loop; } display(p->infor); popstack(p,d); } } }

Postorder (Tree) แบบ Recursive

RePostorder (Tree)

{ if (Tree = null ) display("Emptry Tree"); else { if (Tree->left <> null ) Postorder (Tree->left); if (Tree->rigth <> null ) Postorder (Tree->rigth); display(Tree->infor); } }

***ตรวจสอบความคล้าย (Similar) และเหมือนกัน (Equivalent) ของ Tree

Algorithm นี้สามารถ ทำงานได้ทั้งสองอย่าง ขึ้นอยู่กับค่าของ choice ที่ส่งมา


compare(TreeA, TreeB, flag, choice)

{ if (choice = 2) if (TreeA->item <> TreeB->item) flag = 'n'; if ((TreeA->lnext <> null) and (TreeB->lnext <> null) and (flag = 'y')) compare(TreeA->lnext,TreeB->lnext,flag,choice); else if ((TreeA->lnext <> TreeB->lnext ) flag = 'n'; if ((TreeA-rnext <> null) and (TreeB->rnext <> null) and (flag = 'y')) compare(TreeA->rnext,TreeB->rnext,flag,choice); else if (TreeA->rnext <> TreeB->rnext) flag = 'n'; }