BINARY TREESsomchai/spj/slides/... · 2005. 1. 15. · S. Prasitjutrakul 1994 ต นไม...

23
BINARY TREES

Transcript of BINARY TREESsomchai/spj/slides/... · 2005. 1. 15. · S. Prasitjutrakul 1994 ต นไม...

  • BINARY TREES

  • S. Prasitjutrakul 1994

    ตนไมแบบทวิภาค (Binary Trees)

    A binary tree is either empty or it consists of a node calledthe root together with two binary trees called the leftsubtree and the right subtree of the root.

  • S. Prasitjutrakul 1994

    Binary TreesJim

    Amy Kim

    KayGuy Sam

    Boy

    typedef struct NodeTag { ItemType info; struct NodeTag *pLeft; struct NodeTag *pRight;} NodeType;

  • S. Prasitjutrakul 1994

    ! แบบกอนลํ าดับ (preorder)! แบบตามลํ าดับ (inorder)! แบบหลังลํ าดับ (postorder)

    Traversal of Binary Trees

    A

    I J K

    GF

    B

    H

    D E

    C

    rightleft

    root

    Pre( root ) = root Pre( left ) Pre( right )In( root ) = In( left ) root In( right )Post( root ) = Post( left ) Post( right ) root

  • S. Prasitjutrakul 1994

    Traversal of Binary Treesvoid Preorder( NodeType *pRoot ){ if ( pRoot ) { Visit( pRoot ); Preorder( pRoot->pLeft ); Preorder( pRoot->pRight ); }}void Inorder( NodeType *pRoot ){ if ( pRoot ) { Inorder( pRoot->pLeft ); Visit( pRoot ); Inorder( pRoot->pRight ); }}void Postorder( NodeType *pRoot ){ if ( pRoot ) { Postorder( pRoot->pLeft );

    pRoot->pRighpRoot->pLeft

    pRoot

  • S. Prasitjutrakul 1994

    Traversal of Binary Trees

    A EK

    MI

    D

    C

    B F

    J

    G

    L

    H

    Preorder : G D B A C F E J I H N K L

    Inorder : A B C D E F G H I J K L M

    Postorder : A C B E F D H I L K N J G

  • S. Prasitjutrakul 1994

    Expression Trees

    A C

    AND

    B

    <

    D

    A

    C

    +

    B

    ×

    H

    log

    N

    !

    A2

    0.5

    C

    A

    B-

    B 2

    4

    /

    +

    - ?

    ? ×

    ×

    ×

    log H N!

    A + ( B × C ) (AD) -B+(B ? 2 - 4×A×C)? 0.52×A

  • S. Prasitjutrakul 1994

    Expression Tree & Tree Traversal

    A CB

    × +

    D

    E/

    -

    Inorder : A × B / C + D - E

    Preorder : - / × A B + C D E

    Postorder : A B × C D + / E -

  • S. Prasitjutrakul 1994

    ตนไมคนหาแบบทวิภาค (Binary Search Tree)Jim

    Amy Kim

    KayGuy Sam

    Boy

    typedef struct NodeTag { ItemType info; struct NodeTag *pLeft; struct NodeTag *pRight;} NodeType;

    คียมีคามากกวา"Jim"คียมีคานอยกวา

    "Jim"

  • S. Prasitjutrakul 1994

    Binary Search TreesAmy

    Boy

    Guy

    Jim

    Kay

    Kim

    Sam

    Kim

    Kay

    Sam

    Boy

    Jim

    Amy

    GuyJim

    Kim

    KayGuy Sam

    Boy

    Amy

  • S. Prasitjutrakul 1994

    TreeSearchNodeType *TreeSearch( NodeType *p, KeyType Target ){ if ( p ) { if ( LT( Target, p->info.key ) ) p = TreeSearch( p->pLeft, Target ); else if ( GT( Target, p->info.key ) ) p = TreeSearch( p->pRight, Target ); } return( p );}

    NodeType *TreeSearch( NodeType *p, KeyType Target ){ while ( p != NULL && NE( Target, p->info.key ) ) { if ( LT( Target, p->info.key ) ) p = p->pLeft; else p = p->pRight; } return( p );

  • S. Prasitjutrakul 1994

    Insertion into a Binary Search TreeNodeType *Insert( NodeType *pRoot, NodeType *pNewNode ){ if ( pRoot == NULL ) { pRoot = pNewNode; pRoot->pLeft = pRoot->pRight = NULL; } else if ( LT( pNewNode->info.key, pRoot->info.key ) ) pRoot->pLeft = Insert( pRoot->pLeft, pNewNode ); else if ( GT( pNewNode->info.key, pRoot->info.key ) ) pRoot->pRight = Insert( pRoot->pRight, pNewNode ); else Error( "Duplicate key" ); return( pRoot );}

    Jim

    Kim

    KayGuy Jan

    Boy

    Amy

    pNewNode

    pRoot

  • S. Prasitjutrakul 1994

    Deletion from a Binary Search Tree

    Jim

    Kim

    KayGuy

    Boy

    Amy

    Jim

    Kim

    KayGuy

    Jan

    Boy

    Amy

    pNode

    กรณีที่ *pNode เปนใบ

  • S. Prasitjutrakul 1994

    Deletion from a Binary Search Tree

    Jim

    KayGuy

    Boy

    Amy

    Jim

    Kim

    KayGuy

    Jan

    Boy

    Amy

    pNode

    Jan

    กรณีที่ตนไมยอยขางหนึ่งของ *pNode ไมมี

  • S. Prasitjutrakul 1994

    Deletion from a Binary Search Tree

    กรณีที่ *pNode มีตนไมยอยทั้งสองขาง

    Jim

    Kim

    KayGuy

    Jan

    Boy

    Amy

    pNode

    Dan

    Jim

    Jan

    Guy

    Dan

    Amy

    Kim

    Kay

  • S. Prasitjutrakul 1994

    Deletion from a Binary Seach Tree

    N N N

    K

    K

    K S

    K

    S

  • S. Prasitjutrakul 1994

    Deletion from a Binary Search Tree

    Inorder : A B C D E F G H I J K L

    A E K

    MI

    D

    C

    B F

    J

    G

    H A E K

    MI

    D

    C

    B F

    J

    G

    H

    ถาจะลบ G จะสรุปไดเสมอวา F และ H จะมีตนไมยอยอยางมากเพียงหนึ่งตน

  • S. Prasitjutrakul 1994

    Treesort1. รับขอมูลที่ตองการเรียงลํ าดับ2. สรางตนไมคนหาแบบทวิภาคจากขอมูลเหลานั้น3. แวะผานขอมูลในตนไม แบบตามลํ าดับ

    K G H E U I A C

    K

    K

    U

    C

    A I

    HE

    G

    K

    U

    A I

    HE

    G

    K

    U

    I

    HE

    G

    K

    U

    HE

    G

    K

    HE

    G

    K

    H

    G

    K

    G

  • S. Prasitjutrakul 1994

    Treesort vs. QuicksortK G H E U I A C

    G H E I A C K U

    E A C G H I K U

    A C E G H I K U

    A C E G H I K U

    A C E G H I K U

    A C E G H I K U

    A C E G H I K U

    A C E G H I K U

    K

    U

    C

    A I

    HE

    G

  • S. Prasitjutrakul 1994

    Building a Binary Search Tree

    1 3 5 7 9 11

    4

    2 6 10 13

    12

    8

    1 2 3 4 5 6 7 8 9 10 11 12 13

  • S. Prasitjutrakul 1994

    Building a Binary Search Tree

    1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31

    4

    2 6 10 14 18 22 26 30

    12 20

    8 24

    28

    16

    ถากํ าหนดใหเลขประจํ า node ตางๆในตนไมแบบทวิภาคบริบูรณ (complete binary tree) ที่มีความสูง h ตรงตามลํ าดับของการแวะผานแบบตามลํ าดับ (inorder) จะไดวา เลขประจํ า node ที่อยูในระดับที่ k จะหารดวย 2 ลงตัว แตจะหารดวย 2 +1 ไมลงตัว h-k

    h-k

  • S. Prasitjutrakul 1994

    Building a Binary Search Tree

    1 1

    2

    1 3

    2

    1 3

    2

    4

    1 3 5

    4

    2

    1 3 5

    4

    2 6

    1 3 5 7

    4

    2 6

    1 3 5 7

    4

    2 6

    8

    1 3 5 7 9

    4

    2 6

    8

    1 3 5 7 9

    4

    2 6 10

    8

    1 3 5 7 9

    4

    2 6 10

    8

    1 2 3 4 5 6 7 8 9 10

  • S. Prasitjutrakul 1994

    Randomly Built Binary Search Trees

    S(n) = จํ านวนการเปรียบเทียบเฉลี่ย ในกรณีพบขอมูลU(n) = จํ านวนการเปรียบเทียบเฉลี่ย ในกรณีไมพบขอมูลS n

    In

    U nE

    nE I n

    S nn

    U n

    S nU U U n

    nn U n n U U U n

    nU n n U U U n

    ( ) ( )

    ( ) ( )

    ( )( ) ( ) ... ( )

    ( ) ( ) ( ) ( ) ... ( )

    ( ) ( ) ( ) ( ) ... ( )

    = + =+

    = +

    = +FHGIKJ −

    = ++ + + −

    + = + + + −− = − + + + + −

    21

    2

    12

    11

    3

    10 1 1

    1 4 0 1 1

    1 4 1 0 1 2

    SnIn

    UnE

    nE I n

    Snn

    Un

    SnU U Un

    nn Un n U U Un

    nUn n U U Un

    ( ) ( )

    ( ) ( )

    ( )( ) ( ) ... ( )

    ( ) ( ) ( ) () ... ( )

    ( ) ( ) ( ) () ... ( )

    = + =+

    = +

    = +FHGIKJ −

    = ++ + + −

    + = + + + −− = − + + + + −

    21

    21

    2

    11

    3

    10 1 1

    1 4 0 1 1

    1 4 1 0 1 2