data structures n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Data Structures 實習十二 樹 PowerPoint Presentation
Download Presentation
Data Structures 實習十二 樹

Loading in 2 Seconds...

play fullscreen
1 / 17

Data Structures 實習十二 樹 - PowerPoint PPT Presentation


  • 54 Views
  • Uploaded on

Data Structures 實習十二 樹. Department of Computer Science and Engineering National Taiwan Ocean University. Instructor: Ching-Chi Lin 林清池 助理教授 chingchi.lin@gmail.com. Tree Traversal. 從 root 開始,使用某種 特定的 順序,走過這棵樹所有的節點。 In-order :先走左邊的子樹,再自己,再走右邊的子樹。 Pre-order :先自己,再走左邊的子樹,再走右邊的子樹。

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Data Structures 實習十二 樹' - cedric


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
data structures

Data Structures實習十二 樹

Department of Computer Science and EngineeringNational Taiwan Ocean University

Instructor: Ching-Chi Lin林清池 助理教授

chingchi.lin@gmail.com

tree traversal
Tree Traversal
  • 從root開始,使用某種特定的順序,走過這棵樹所有的節點。
    • In-order:先走左邊的子樹,再自己,再走右邊的子樹。
    • Pre-order:先自己,再走左邊的子樹,再走右邊的子樹。
    • Post-order:先走左邊的子樹,再走右邊的子樹,再自己。
    • Level-order:同樣高度的先走,從左到右。
tree traversal1
Tree Traversal
  • Inorder
    • A / B * C * D + E
  • Preorder
    • + * * / A B C D E
  • Postorder
    • A B / C * D * E +

+

*

E

*

D

/

C

A

B

= NULL

inorder traversal pseudocode
二元樹Inorder traversal– PseudoCode
  • void inorder (tree_pointer ptr)

{/* inorder tree traversal */

if (ptr) {

inorder (ptrleft_child);

printf (“%d”, ptrdata);

inorder (ptrright_child);

}

}

pre order traversal pseudocode
二元樹Preorder traversal-PseudoCode
  • void preorder (tree_pointer ptr)

{/* preorder tree traversal */

if (ptr) {

printf (“%d”, ptrdata);

preorder (ptrleft_child);

preorder (ptrright_child);

}

}

postorder traversal pseudocode
二元樹Postorder traversal-PseudoCode
  • void postorder (tree_pointer ptr)

{/* postorder tree traversal */

if (ptr) {

postorder (ptrleft_child);

postorder (ptrright_child);

printf (“%d”, ptrdata);

}

}

level order traversal
Level-Order traversal
  • 首先拜訪根節點。
  • 然後是根節點的左子節點,接著根節點的右子節點。
  • 以相同的方式拜訪下一階層中的節點,由最左邊的節點到最右邊的節點。
level order traversal1
Level-Order traversal

+

*

E

*

D

/

C

Level-Order traversal:

+*E*D/CAB

A

B

level order traversal pseudocode
Level-Order traversal-PseudoCode
  • void level_order (tree_pointer ptr)

{/* level order tree traversal */

intfront = rear = 0;

tree_pointer queue [MAX_QUEUE_SIZE];

if (!ptr) return; /*empty tree*/

addq(ptr);

for ( ; ; ) {

ptr = deleteq();

if (ptr) {

printf(“%d”,ptr->data);

if (ptr->left_child)addq(ptr->left_child);

if (ptr->right_child)addq(ptr->right_child);

}else break;

}

}

slide10
練習
  • 請實做出二元樹(binary tree)的Abstract Data Type。
    • 非leaf node為算符。
    • leaf node為數字。
  • 從檔案讀入一個三元組(3-tuple)式子,並轉成二元樹型態。
    • 檔案為純文字檔,請從教學網站下載。
  • 請實做出對二元樹進行In-order /Pre-order/Post-order/Level-order的函式。
  • 輸入格式:(根,左邊子樹,右邊子樹)
    • Ex:(-,(/,(*,16,(+,24,13)),9),10)
slide11
練習—輸入格式
  • (-,(/,(*,16,(+,24,13)),9),10)

-

/

10

*

9

+

16

13

24

3 tuple
3-tuple轉二元樹:演算法

(-,(/,(*,16,(+,24,13)),9),10)

(-,(/,(*,16,(+,24,13)),9),10)

-

(/,(*,16,(+,24,13)),9)

/

10

(*,16,(+,24,13))

*

9

(+,24,13)

+

16

24

13

3 tuple1
3-tuple轉二元樹:演算法
  • (根, 左邊子樹, 右邊子樹)
  • 每一組tuple之間用逗號隔開。
    • 第一個項目(根)一定是運算符號。
    • 第二/三項可能是數字或是算式。
      • 數字即為leaf node。
      • 算式則要進一步使用遞迴展開。
    • 如何判斷是哪一個逗點分隔?
      • 提示:括號必定成對。
  • (-,(/,(*,16,(+,24,13)),9),10)
int atoi const char str
intatoi (const char * str);
  • #include<stdlib.h>
  • 輸入一個字串。
  • 如果該字串是數字,傳回一整數。
  • Ex:int a = atoi("100")
3 tuple pseudocode 1 1
3-tuple轉二元樹:PseudoCode 1/1
  • node* build_tree_from_string (char* formula)

{

char left[1024],right[1024],op;

root = get_node();

if (formula is a number){

root->value = atoi(formula);

root->left = NULL;

root->right = NULL;

}else{

<Separate formula into operator, left_subtree, right_subtree>;

root->operator= operator;

root->left=build_tree_from_string(left);

root->right=build_tree_from_string(right);

} return root;

}