116
Chương 7: CÂY (Tree)

C7_Cay

Embed Size (px)

DESCRIPTION

Cây

Citation preview

  • Chng 7: CY (Tree)

    Chng 7: Cy (Tree)

    Ni dung

    *

    Cu trc cy (Tree)Cu trc cy nh phn (Binary Tree)Cu trc cy nh phn tm kim (Binary Search Tree)Cu trc cy nh phn tm kim cn bng (AVL Tree)

    Chng 7: Cy (Tree)

    Tree inh nghia

    *

    Cy l mt tp hp T cc phn t (gi l nt ca cy) trong c 1 nt c bit c gi l gc, cc nt cn li c chia thnh nhng tp ri nhau T1, T2 , ... , Tn theo quan h phn cp trong Ti cng l mt cyA tree is a set of one or more nodes T such that:i. there is a specially designated node called a rootii. The remaining nodes are partitioned into n disjointed set of nodes T1, T2,,Tn, each of which is a tree

    Chng 7: Cy (Tree)

    Tree V d

    *

    S t chc ca mt cng ty

    Cng ty A

    R&D

    Kinh doanh

    Tai vu

    San xuat

    TV

    CD

    Amplier

    Noi a

    Quoc te

    Chau au

    My

    Cac nc

    Chng 7: Cy (Tree)

    Tree V d

    Cy th mc

    *

    Chng 7: Cy (Tree)

    Tree V d

    *

    Chng 7: Cy (Tree)

    Tree V d

    This is a tree because it is a set of nodes {A,B,C,D,E,F,G,H,I}, with node A as a root node and the

    remaining nodes partitioned into three disjointed sets {B,G,H,I}, { C,E,F} and {D}, respectively. Each of

    these sets is a tree because each satisfies the aforementioned definition properly.

    Chng 7: Cy (Tree)

    Tree V d

    Khng phai cy

    *

    Nhn xet: Trong cu trc cy khng tn ti chu trnh

    Even though this is a set of nodes {A,B,C,D,E,F,G,H,I}, with node A as a root node, this is not a tree

    because the fact that node E is shared makes it impossible to partition nodes B through I into

    disjointed sets.

    Chng 7: Cy (Tree)

    Tree - Mt s khi nim c bn

    Bc ca mt nt (Degree of a Node of a Tree): L s cy con ca nt . Nu bc cua mt nut bng 0 thi nut o goi la nut la (leaf node)Bc ca mt cy (Degree of a Tree):L bc ln nht ca cc nt trong cy. Cy c bc n th gi l cy n-phnNt gc (Root node): L nt khng c nt chaNt l (Leaf node): L nt c bc bng 0

    *

    Chng 7: Cy (Tree)

    Tree - Mt s khi nim c bn

    *

    Nt nhanh: L nt c bc khc 0 v khng phi l gcMc ca mt nt (Level of a Node): Mc (gc (T) ) = 0Gi T1, T2, T3, ... , Tn l cc cy con ca T0 Mc(T1) = Mc(T2) = ... = Mc(Tn) = Mc(T0) + 1

    Chng 7: Cy (Tree)

    Tree V d

    Chng 7: Cy (Tree)

    *

    Owner

    Manager

    Chef

    Waitress

    Cook

    Helper

    Waiter

    Nut gc (root node)

    Tree V d

    nut l (leaf node)

    *

    Chng 7: Cy (Tree)

    Tree V d

    *

    Tree nodes

    Tree edges

    Chng 7: Cy (Tree)

    Tree V d

    *

    Gc(root)

    Nt trong

    l

    cha

    v

    con

    Chng 7: Cy (Tree)

    *

    Owner

    Jake

    Manager Chef Brad Carol

    Waitress Waiter Cook Helper

    Joyce Chris Max Len

    A Tree Has Levels

    LEVEL 0

    *

    Chng 7: Cy (Tree)

    *

    Owner

    Jake

    Manager Chef Brad Carol

    Waitress Waiter Cook Helper

    Joyce Chris Max Len

    Level One

    LEVEL 1

    *

    Chng 7: Cy (Tree)

    *

    Owner

    Jake

    Manager Chef Brad Carol

    Waitress Waiter Cook Helper

    Joyce Chris Max Len

    Level Two

    LEVEL 2

    *

    Chng 7: Cy (Tree)

    nh ngha

    *

    Node 0

    Node 1

    Node 2

    Node 3

    Node 4

    Node 5

    Node 6

    l

    Gc

    Node 1,2,3 con ca gc

    Node 4, 5 l anh em

    Node 1 l cha ca

    Nodes 4,5

    Node 0 l t tin ca tt c cc node

    Nodes 1-6 l con chu ca node 0

    Chng 7: Cy (Tree)

    Mt s khi nim c bn

    di ng i t gc n nt x:

    Px = s nhnh cn i qua k t gc n x

    di ng i tng ca cy:

    trong Px l di ng i t gc n X

    di ng i trung bnh: PI = PT/n (n l s nt trn cy T)Rng cy: l tp hp nhiu cy trong th t cc cy l quan trng

    *

    Chng 7: Cy (Tree)

    Depth-first Search

    *

    Chng 7: Cy (Tree)

    Breadth-first Search

    *

    Chng 7: Cy (Tree)

    Ni dung

    *

    Cu trc cy (Tree)Cu trc cy nh phn (Binary Tree)Cu trc cy nh phn tm kim (Binary Search Tree)Cu trc cy nh phn tm kim cn bng (AVL Tree)

    Chng 7: Cy (Tree)

    Binary Tree inh nghia

    *

    Cy nh phn l cy m mi nt c ti a 2 cy con

    Chng 7: Cy (Tree)

    Binary Tree Vi du

    *

    Cy con trai

    Cy con phai

    Hinh anh mt cy nh phn

    Chng 7: Cy (Tree)

    Binary Tree Vi du

    Cy lch trai va cy lch phai

    Chng 7: Cy (Tree)

    Binary Tree Vi du

    A full binary tree

    Chng 7: Cy (Tree)

    Binary Tree Vi du

    Cy nh phn dng biu din mt biu thc ton hc:

    *

    Chng 7: Cy (Tree)

    Binary Tree Mt s tnh cht

    S nt nm mc i 2iS nt l 2h-1, vi h l chiu cao ca cyChiu cao ca cy h log2N, vi N la s nt trong cyS nt trong cy 2h-1vi h l chiu cao ca cy

    *

    Xem them gtrinh trang 142

    A full binary tree is a binary of depth k having 2^k 1 nodes. If it has < 2^k 1, it is not a full binary tree.

    Chng 7: Cy (Tree)

    Binary Tree

    Cy nh phn y

    *

    0

    1

    2

    3

    7

    4

    5

    6

    8

    0

    1

    2

    3

    4

    5

    6

    7

    8

    2k+1, 2k+2

    k=3

    y : cc node l lun nm mc cao nht v cc nt khng l nt l c y 2 nhnh con.

    Chng 7: Cy (Tree)

    Binary Tree - Biu din

    In general, any binary tree can be represented using an array, but ?

    If a binary tree is a complete binary tree, it can be represented using an array capable of holding n

    elements where n is the number of nodes in a complete binary tree. If the tree is an array of n

    elements, we can store the data values of the ith node of a complete binary tree with n nodes at an

    index i in an array tree. That means we can

    map node i to the ith index in the array, and

    the parent of node i will get mapped at an index i/2, whereas

    the left child of node i gets mapped at an index 2i and

    the right child gets mapped at an index 2i + 1.

    For example, a complete binary tree with depth k = 3,

    having the number of nodes n = 5, can be represented using an array of

    In general, any binary tree can be represented using an array. We see that an array representation of

    a complete binary tree does not lead to the waste of any storage. But if you want to represent a binary

    tree that is not a complete binary tree using an array representation, then it leads to the waste of

    storage as shown in Figure 7.9.

    Chng 7: Cy (Tree)

    Binary Tree - Biu din

    *

    S dng mt bin ng lu tr cc thng tin cua mt nut:Thng tin lu tr ti nta ch nt gc ca cy con tri trong b nha ch nt gc ca cy con phi trong b nhKhai bao cu truc cy nhi phn: qun l cy nh phn ch cn qun l a ch nt gc:

    Tree root;

    struct TNode

    {

    DataType data;

    TNode *pLeft, *pRight;

    };

    typedef TNode* Tree;

    An array representation of a binary tree is not suitable for frequent insertions and deletions, even

    though no storage is wasted if the binary tree is a complete binary tree. It makes insertion and deletion

    in a tree costly. Therefore, instead of using an array representation, we can use a linked

    representation, in which every node is represented as a structure with three fields

    Chng 7: Cy (Tree)

    Binary Tree - Biu din

    *

    a

    b

    c

    d

    e

    g

    h

    i

    f

    j

    k

    Chng 7: Cy (Tree)

    Binary Tree - Duyt cy nh phn

    *

    C 3 kiu duyt chnh c th p dng trn cy nh phn: Duyt theo th t trc - preorder (Node-Left-Right: NLR)Duyt theo th t gia - inorder (Left-Node-Right: LNR)Duyt theo th t sau - postorder (Left-Right-Node: LRN)Tn ca 3 kiu duyt ny c t da trn trnh t ca vic thm nt gc so vi vic thm 2 cy con

    Chng 7: Cy (Tree)

    Binary Tree - Duyt cy nh phn

    Duyt theo th t trc NLR (Node-Left-Right)

    Kiu duyt ny trc tin thm nt gc sau thm cc nt ca cy con tri ri n cy con phi

    Th tc duyt c th trnh by n gin nh sau:

    *

    void NLR (Tree t)

    {

    if (t != NULL)

    {

    // X ly t tng ng theo nhu cu

    NLR(t->pLeft);

    NLR(t->pRight);

    }

    }

    Chng 7: Cy (Tree)

    Binary Tree - Duyt cy nh phn NLR

    *

    A

    B

    D

    H

    I

    N

    E

    J

    K

    O

    C

    F

    L

    P

    G

    M

    A

    Kt qu:

    B

    D

    H

    I

    N

    E

    J

    O

    K

    C

    F

    L

    P

    G

    M

    Chng 7: Cy (Tree)

    Binary Tree - Duyt cy nh phn

    Duyt theo th t gia LNR (Left-Node-Right)

    Kiu duyt ny trc tin thm cc nt ca cy con tri sau thm nt gc ri n cy con phiTh tc duyt c th trnh by n gin nh sau:

    *

    void LNR(Tree t)

    {

    if (t != NULL)

    {

    LNR(t->pLeft);

    //X ly nut t theo nhu cu

    LNR(t->pRight);

    }

    }

    Chng 7: Cy (Tree)

    Binary Tree - Duyt cy nh phn LNR

    *

    A

    B

    D

    H

    I

    N

    E

    J

    K

    O

    C

    F

    L

    P

    G

    M

    H

    Kt qu:

    D

    N

    I

    B

    J

    O

    E

    K

    A

    F

    P

    L

    C

    M

    G

    Chng 7: Cy (Tree)

    Binary Tree - Duyt cy nh phn

    Duyt theo th t gia LRN (Left-Right-Node)

    Kiu duyt ny trc tin thm cc nt ca cy con tri sau thm n cy con phi ri cui cng mi thm nt gcTh tc duyt c th trnh by n gin nh sau:

    *

    void LRN(Tree t)

    {

    if (t != NULL)

    {

    LRN(t->pLeft);

    LRN(t->pRight);

    // X ly tng ng t theo nhu cu

    }

    }

    Chng 7: Cy (Tree)

    Binary Tree - Duyt cy nh phn LRN

    *

    A

    B

    D

    H

    I

    N

    E

    J

    K

    O

    C

    F

    L

    P

    G

    M

    H

    Kt qu:

    N

    I

    D

    O

    J

    K

    E

    B

    P

    L

    F

    M

    G

    C

    A

    Chng 7: Cy (Tree)

    *

    Mt v d quen thuc trong tin hc v ng dng ca duyt theo th t sau l vic xc nh tng kch thc ca mt th mc trn a

    Binary Tree - Duyt cy nh phn LRN

    Chng 7: Cy (Tree)

    *

    Tnh ton gi tr ca biu thc da trn cy biu thc

    Binary Tree - Duyt cy nh phn LRN

    (3 + 1)3/(9 5 + 2) (3(7 4) + 6) = 13

    Chng 7: Cy (Tree)

    Mt cch biu din cy nh phn khc

    *

    i khi, khi nh ngha cy nh phn, ngi ta quan tm n c quan h 2 chiu cha con ch khng ch mt chiu nh nh ngha phn trn. Lc , cu trc cy nh phn c th nh ngha li nh sau:

    typedef struct tagTNode

    {

    DataTypeKey;

    struct tagTNode*pParent;

    struct tagTNode*pLeft;

    struct tagTNode*pRight;

    }TNODE;

    typedef TNODE*TREE;

    Chng 7: Cy (Tree)

    Mt cch biu din cy nh phn khc

    *

    Chng 7: Cy (Tree)

    Mt s thao tc trn cy

    m s nodem s node lTnh chiu cao

    *

    Chng 7: Cy (Tree)

    m s node

    *

    Chng 7: Cy (Tree)

    m s node

    S node (EmptyTree) = 0S node (Tree) = 1 + S node (Tree.Left)

    + S node (Tree.Right)

    *

    Chng 7: Cy (Tree)

    m s node l

    *

    Chng 7: Cy (Tree)

    m s node l

    S nt l (EmptyTree) = 0

    S nt l(RootOnly) = 1

    S nt l(Tree) = S nt l (Tree.Left) +

    S nt l (Tree.Right)

    *

    Chng 7: Cy (Tree)

    Tnh chiu cao

    *

    Chng 7: Cy (Tree)

    Tnh chiu cao

    Height(Tree) = 1 + maximum(Height(Tree.Left), Height(Tree.Right))

    Depth(EmptyTree) = 0

    *

    Chng 7: Cy (Tree)

    Ni dung

    *

    Cu trc cy (Tree)Cu trc cy nh phn (Binary Tree)Cu trc cy nh phn tm kim (Binary Search Tree)Cu trc cy nh phn tm kim cn bng (AVL Tree)

    Chng 7: Cy (Tree)

    Binary Search Tree

    Trong chng 6, chng ta lm quen vi mt s cu trc d liu ng. Cc cu trc ny c s mm do nhng li b hn ch trong vic tm kim thng tin trn chng (ch c th tm kim tun t)Nhu cu tm kim l rt quan trng. V l do ny, ngi ta a ra cu trc cy tha mn nhu cu trnTuy nhin, nu ch vi cu trc cy nh phn nh ngha trn, vic tm kim cn rt m hCn c thm mt s rng buc cu trc cy tr nn cht ch, d dng hnMt cu trc nh vy chnh l cy nh phn tm kim

    Chng 7: Cy (Tree)

    Binary Search Tree - nh ngha

    Cy nh phn tm kim (CNPTK) l cy nh phn trong ti mi nt, kha ca nt ang xt ln hn kha ca tt c cc nt thuc cy con tri v nh hn kha ca tt c cc nt thuc cy con phiNh rng buc v kha trn CNPTK, vic tm kim tr nn c nh hngNu s nt trn cy l N th chi ph tm kim trung bnh ch khong log2NTrong thc t, khi xt n cy nh phn ch yu ngi ta xt CNPTK

    *

    Chng 7: Cy (Tree)

    Binary Search Tree Vi du

    *

    44

    18

    88

    13

    37

    59

    108

    15

    23

    40

    55

    71

    Chng 7: Cy (Tree)

    *

    Binary Search Tree Vi du

    *

    Chng 7: Cy (Tree)

    *

    Binary Search Tree Vi du

    *

    Chng 7: Cy (Tree)

    Cy nh phn v tm kim nh phn

    *

    0 1 2 3 4 5 6

    34

    41

    56

    63

    72

    89

    95

    Chng 7: Cy (Tree)

    Cy nh phn v tm kim nh phn

    *

    0 1 2 3 4 5 6

    0 1 2

    4 5 6

    34

    41

    56

    63

    72

    89

    95

    34

    41

    56

    72

    89

    95

    Chng 7: Cy (Tree)

    Cy nh phn v tm kim nh phn

    *

    0 1 2 3 4 5 6

    0 1 2

    4 5 6

    0 2

    4 6

    34

    41

    56

    63

    72

    89

    95

    34

    41

    56

    72

    89

    95

    34

    56

    72

    95

    Chng 7: Cy (Tree)

    Binary Search Tree (BST)

    *

    63

    41

    89

    34

    56

    72

    95

    Chng 7: Cy (Tree)

    Binary Search Tree Biu din

    *

    Cu trc d liu ca CNPTK l cu trc d liu biu din cy nh phn ni chung (???)Thao tc duyt cy trn CNPTK hon ton ging nh trn cy nh phn (???)Ch : khi duyt theo th t gia, trnh t cc nt duyt qua s cho ta mt dy cc nt theo th t tng dn ca kha

    Chng 7: Cy (Tree)

    Binary Search Tree Duyt cy

    *

    Duyt inorder: 1 3 5 6 10 12 13 18 20 25 29 32 35 37 41 50

    Duyt gia trn CNPTK

    25

    10

    3

    1

    6

    5

    18

    12

    20

    13

    37

    29

    35

    32

    50

    41

    Chng 7: Cy (Tree)

    Binary Search Tree Duyt cy

    *

    Duyt postorder:

    Duyt sau trn CNPTK

    25

    10

    3

    1

    6

    5

    18

    12

    20

    13

    37

    29

    35

    32

    50

    41

    Chng 7: Cy (Tree)

    Binary Search Tree Duyt cy

    *

    Duyt preorder:

    Duyt trc trn CNPTK

    25

    10

    3

    1

    6

    5

    18

    12

    20

    13

    37

    29

    35

    32

    50

    41

    Chng 7: Cy (Tree)

    Binary Search Tree Tm kim

    *

    25

    10

    3

    1

    6

    5

    18

    12

    20

    13

    37

    29

    35

    32

    50

    41

    Tm kim

    13

    Khc nhau

    Ging nhau

    Node gc nh hn

    Node gc ln hn

    Tm thy

    S node duyt: 5

    S ln so snh: 9

    Tm kim trn CNPTK

    Chng 7: Cy (Tree)

    Binary Search Tree Tm kim

    *

    25

    10

    3

    1

    6

    5

    18

    12

    20

    13

    37

    29

    35

    32

    50

    41

    Tm kim

    14

    Khc nhau

    Node gc nh hn

    Node gc ln hn

    Khng tm thy

    S node duyt: 5

    S ln so snh: 10

    Tm kim trn CNPTK

    Chng 7: Cy (Tree)

    Binary Search Tree Tm kim

    Tm mt phn t x trong CNPTK (dng quy):

    *

    TNode* searchNode(Tree T, DataType X)

    {

    if (T)

    {

    if(T->Key == X)

    return T;

    if(T->Key > X)

    return searchNode(T->pLeft, X);

    return searchNode(T->pRight, X);

    }

    return NULL;

    }

    Chng 7: Cy (Tree)

    Binary Search Tree Tm kim

    Tm mt phn t x trong CNPTK (dng vng lp):

    *

    TNode * searchNode(Tree T, DataType x)

    {

    TNode *p = T;

    while (p != NULL)

    {

    if(x == p->Key) return p;

    else

    if(x < p->Key) p = p->pLeft;

    elsep = p->pRight;

    }

    return NULL;

    }

    Chng 7: Cy (Tree)

    Binary Search Tree Tm kim

    *

    Nhn xt:S ln so snh ti a phi thc hin tm phn t X l h, vi h l chiu cao ca cyNh vy thao tc tm kim trn CNPTK c n nt tn chi ph trung bnh khong O(log2n)

    Chng 7: Cy (Tree)

    Binary Search Tree Thm

    *

    Vic thm mt phn t X vo cy phi bo m iu kin rng buc ca CNPTKTa c th thm vo nhiu ch khc nhau trn cy, nhng nu thm vo mt nt ngoi s l tin li nht do ta c th thc hin qu trnh tng t thao tc tm kimKhi chm dt qu trnh tm kim cng chnh l lc tm c ch cn thmHm insert tr v gi tr:

    1 khi khng b nh

    0 khi gp nt c

    1 khi thm thnh cng

    Chng 7: Cy (Tree)

    Binary Search Tree Thm

    Thm mt phn t vo cy

    *

    int insertNode (Tree &T, DataType X)

    {if (T) {

    if(T->data == X) return 0;

    if(T->data > X)

    return insertNode(T->pLeft, X);

    else

    return insertNode(T->pRight, X);

    }

    T = new TNode;

    if (T == NULL) return -1;

    T->data = X;

    T->pLeft = T->pRight = NULL;

    return 1;

    }

    Chng 7: Cy (Tree)

    *

    6

    Binary Search Tree Thm

    V d to cy vi dy:

    4, 6, 1, 2, 5, 7, 3

    4

    1

    2

    5

    7

    3

    Chng 7: Cy (Tree)

    Binary Search Tree Thm

    *

    30

    12

    49

    51

    17

    22

    56

    70

    68

    65

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    *

    Vic hy mt phn t X ra khi cy phi bo m iu kin rng buc ca CNPTKC 3 trng hp khi hy nt X c th xy ra:X l nt lX ch c 1 con (tri hoc phi)X c c 2 con

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    *

    Trng hp 1: X l nt l Ch n gin hy X v n khng mc ni n phn t no khc

    44

    18

    88

    13

    37

    59

    108

    15

    23

    40

    55

    71

    T/h 1: huy X=40

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    Trng hp 2: X ch c 1 con (tri hoc phi) Trc khi hy X ta mc ni cha ca X vi con duy nht ca n

    *

    44

    18

    88

    13

    37

    59

    108

    15

    23

    55

    71

    T/h 2: huy X=37

    Trc khi huy X ta moc noi cha cua X vi con duy nhat cua no

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    Trng hp 3: X c 2 con:Khng th hy trc tip do X c 2 con Hy gin tip: Thay v hy X, ta s tm mt phn t th mng Y. Phn t ny c ti a mt conThng tin lu ti Y s c chuyn ln lu ti XSau , nt b hy tht s s l Y ging nh 2 trng hp uVn : chn Y sao cho khi lu Y vo v tr ca X, cy vn l CNPTK

    *

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    Trng hp 3: X c 2 con:C 2 phn t tha mn yu cu: Phn t tri nht trn cy con phiPhn t phi nht trn cy con triVic chn la phn t no l phn t th mng hon ton ph thuc vo thch ca ngi lp trnh y, ta s chn phn t phi nht trn cy con tri lm phn t th mng

    *

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    Trng hp 3: X c 2 con:Khi hy phn t X=18 ra khi cy, phn t 23 l phn t th mng:

    *

    44

    18

    88

    13

    37

    59

    108

    15

    23

    40

    55

    71

    T/h 3: huy X=18

    30

    23

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    Trng hp 3: X c 2 con:Hm delNode tr v gi tr 1, 0 khi hy thnh cng hoc khng c X trong cy:

    int delNode(Tree &T, DataType X)

    Hm searchStandFor tm phn t th mng cho nt p

    void searchStandFor(Tree &p, Tree &q)

    *

    Chng 7: Cy (Tree)

    *

    Binary Search Tree Hy mt phn t c kha X

    int delNode(Tree &T, DataType X)

    {

    if (T == NULL)return 0;

    if (T->data > X)return delNode(T->pLeft, X);

    if (T->data < X)return delNode(T->pRight, X);

    TNode* p = T;

    if (T->pLeft == NULL)

    T = T->pRight;

    else

    if (T->pRight == NULL) T = T->pLeft;

    else // T c 2 con

    searchStandFor(p, T->pRight);

    delete p;

    }

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    Tm phn t th mng

    *

    void searchStandFor(Tree &p, Tree &q)

    {

    if (q->pLeft)

    searchStandFor(p, q->pLeft);

    else

    {

    p->data = q->data;

    p = q;

    q = q->pRight;

    }

    }

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    *

    V d xa 51:

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    *

    V d xa 83:

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    *

    V d xa 36:

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    *

    Xa nt gc (2 ln):

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    *

    V d xa 15:

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    *

    42 l th mng

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    *

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    *

    Kt qu xo ln 1:

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    *

    V d xa 42

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    *

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    *

    Chng 7: Cy (Tree)

    Binary Search Tree Hy mt phn t c kha X

    *

    Xa 15, sau 42:

    Chng 7: Cy (Tree)

    Binary Search Tree Hy ton b cy

    Vic ton b cy c th c thc hin thng qua thao tc duyt cy theo th t sau. Ngha l ta s hy cy con tri, cy con phi ri mi hy nt gc

    *

    void removeTree(Tree &T)

    {

    if(T)

    {

    removeTree(T->pLeft);

    removeTree(T->pRight);

    delete(T);

    }

    }

    Chng 7: Cy (Tree)

    Binary Search Tree

    *

    Nhn xt:Tt c cc thao tc searchNode, insertNode, delNode u c phc tp trung bnh O(h), vi h l chiu cao ca cy Trong trong trng hp tt nht, CNPTK c n nt s c cao h = log2(n). Chi ph tm kim khi s tng ng tm kim nh phn trn mng c th tTrong trng hp xu nht, cy c th b suy bin thnh 1 danh sch lin kt (khi m mi nt u ch c 1 con tr nt l). Lc cc thao tc trn s c phc tp O(n)V vy cn c ci tin cu trc ca CNPTK t c chi ph cho cc thao tc l log2(n)

    Chng 7: Cy (Tree)

    Binary Search Tree

    *

    1,2,3,4,5

    1

    2

    3

    4

    5

    Chng 7: Cy (Tree)

    Ni dung

    *

    Cu trc cy (Tree)Cu trc cy nh phn (Binary Tree)Cu trc cy nh phn tm kim (Binary Search Tree)Cu trc cy nh phn tm kim cn bng (AVL Tree)

    Chng 7: Cy (Tree)

    AVL Tree - nh ngha

    *

    Cy nh phn tm kim cn bng l cy m ti mi nt ca n cao ca cy con tri v ca cy con phi chnh lch khng qu mt.

    Chng 7: Cy (Tree)

    AVL Tree V d

    *

    44

    23

    88

    13

    37

    59

    108

    15

    30

    40

    55

    71

    Chng 7: Cy (Tree)

    AVL Tree

    *

    Lch s cy cn bng (AVL Tree): AVL l tn vit tt ca cc tc gi ngi Nga a ra nh ngha ca cy cn bng Adelson-Velskii v Landis (1962)T cy AVL, ngi ta pht trin thm nhiu loi CTDL hu dng khc nh cy -en (Red-Black Tree), B-Tree, Cy AVL c chiu cao O(log2(n))

    Chng 7: Cy (Tree)

    AVL Tree

    Ch s cn bng ca mt nt: nh ngha: Ch s cn bng ca mt nt l hiu ca chiu cao cy con phi v cy con tri ca n. i vi mt cy cn bng, ch s cn bng (CSCB) ca mi nt ch c th mang mt trong ba gi tr sau y: CSCB(p) = 0 cao cy tri (p) = cao cy phi (p)CSCB(p) = 1 cao cy tri (p) < cao cy phi (p)CSCB(p) =-1 cao cy tri (p) > cao cy phi (p) tin trong trnh by, chng ta s k hiu nh sau: p->balFactor = CSCB(p); cao cy tri (p) k hiu l hL cao cy phi(p) k hiu l hR

    *

    Chng 7: Cy (Tree)

    AVL Tree Biu din

    *

    #defineLH-1/* Cay con trai cao hn */

    #defineEH 0/* Hai cay con bang nhau */

    #defineRH 1/* Cay con phai cao hn */

    struct AVLNode{

    charbalFactor; // Ch s cn bng

    DataTypedata;

    tagAVLNode*pLeft;

    tagAVLNode*pRight;

    };

    typedef AVLNode*AVLTree;

    Chng 7: Cy (Tree)

    AVL Tree Biu din

    *

    Trng hp thm hay hy mt phn t trn cy c th lm cy tng hay gim chiu cao, khi phi cn bng li cyVic cn bng li mt cy s phi thc hin sao cho ch nh hng ti thiu n cy nhm gim thiu chi ph cn bngCc thao tc c trng ca cy AVL:Thm mt phn t vo cy AVLHy mt phn t trn cy AVLCn bng li mt cy va b mt cn bng

    Chng 7: Cy (Tree)

    AVL Tree

    Cc trng hp mt cn bng:Ta s khng kho st tnh cn bng ca 1 cy nh phn bt k m ch quan tm n cc kh nng mt cn bng xy ra khi thm hoc hy mt nt trn cy AVL Nh vy, khi mt cn bng, lch chiu cao gia 2 cy con s l 2C 6 kh nng sau: Trng hp 1 - Cy T lch v bn tri : 3 kh nngTrng hp 2 - Cy T lch v bn phi: 3 kh nng

    *

    Chng 7: Cy (Tree)

    AVL Tree

    Trng hp 1: cy T lch v bn tri

    *

    T

    T1

    L1

    R1

    h

    h-1

    h-1

    L

    R1

    T

    T1

    L1

    h

    h-1

    L

    R

    R

    h-1

    T

    T1

    L1

    h

    h-1

    h

    L

    R

    L1

    Chng 7: Cy (Tree)

    AVL Tree

    Trng hp 2: cy T lch v bn phi

    *

    T

    h-1

    R1

    T1

    h

    h

    R

    L

    L1

    T

    T1

    L1

    R1

    h

    h-1

    R

    T

    R1

    T1

    L1

    h

    h-1

    R

    L

    h-1

    L

    h-1

    Chng 7: Cy (Tree)

    AVL Tree

    *

    Cc trng hp mt cn bng:Cc trng hp lch v bn phi hon ton i xng vi cc trng hp lch v bn tri. V vy, ch cn kho st trng hp lch v bn tri. Trong 3 trng hp lch v bn tri, trng hp T1 lch phi l phc tp nht. Cc trng hp cn li gii quyt rt n gin.

    Chng 7: Cy (Tree)

    AVL Tree - Cn bng li cy AVL

    *

    T/h 1.1: cy T1 lch v bn tri. Ta thc hin php quay n Left-Left

    T

    T1

    L1

    R1

    h

    h-1

    h-1

    L

    R

    T1

    T

    L1

    R1

    h

    h-1

    R

    h-1

    Chng 7: Cy (Tree)

    AVL Tree - Cn bng li cy AVL

    *

    T/h 1.2: cy T1 khng lch. Ta thc hin php quay n Left-Left

    T

    T1

    L1

    h

    h-1

    h

    L

    R

    T1

    T

    L1

    h

    R

    h-1

    R1

    R1

    h

    Chng 7: Cy (Tree)

    AVL Tree - Cn bng li cy AVL

    *

    T/h 1.3: cy T1 lch v bn phi. Ta thc hin php quay kp Left-Right Do T1 lch v bn phi ta khng th p dng php quay n p dng trong 2 trng hp trn v khi cy T s chuyn t trng thi mt cn bng do lch tri thnh mt cn bng do lch phi ? cn p dng cch khc

    Chng 7: Cy (Tree)

    *

    R1

    T

    T1

    L1

    h

    h-1

    L

    R

    h-1

    T

    T1

    L1

    h-1

    R1

    R

    h-1

    T2

    L2

    R2

    T

    T1

    L1

    h-1

    R

    h-1

    T2

    L2

    R2

    Chng 7: Cy (Tree)

    AVL Tree - Cn bng li cy AVL

    Lu : Trc khi cn bng cy T c chiu cao h+2 trong c 3 trng hp 1.1, 1.2 v 1.3Sau khi cn bng:Trng hp 1.1 v 1.3 cy c chiu cao h+1Trng hp 1.2 cy vn c chiu cao h+2. y l trng hp duy nht sau khi cn bng nt T c c ch s cn bng 0Thao tc cn bng li trong tt c cc trng hp u c phc tp O(1)

    *

    Chng 7: Cy (Tree)

    AVL Tree - Cn bng li cy AVL

    *

    T/h 1.1: cy T1 lch v bn tri. Ta thc hin php quay n Left-Left

    T

    T1

    L1

    R1

    h

    h-1

    h-1

    L

    R

    T1

    T

    L1

    R1

    h

    h-1

    R

    h-1

    Chng 7: Cy (Tree)

    AVL Tree - Cn bng li cy AVL

    *

    void rotateLL(AVLTree &T) //quay n Left-Left

    {

    AVLNode* T1 = T->pLeft;

    T->pLeft= T1->pRight;

    T1->pRight= T;

    switch(T1->balFactor) {

    case LH: T->balFactor = EH;

    T1->balFactor = EH;

    break;

    case EH: T->balFactor = LH;

    T1->balFactor = RH;

    break;

    }

    T= T1;

    }

    Quay n Left-Left:

    Chng 7: Cy (Tree)

    AVL Tree - Cn bng li cy AVL

    *

    Quay n Right-Right:

    void rotateRR (AVLTree &T)//quay n Right-Right

    {

    AVLNode*T1 = T->pRight;

    T->pRight= T1->pLeft;

    T1->pLeft= T;

    switch(T1->balFactor){

    case RH: T->balFactor = EH;

    T1->balFactor= EH;

    break;

    case EH: T->balFactor = RH; T1->balFactor= LH;

    break;

    }

    T = T1;

    }

    Chng 7: Cy (Tree)

    AVL Tree - Cn bng li cy AVL

    *

    Quay kp Left-Right:

    void rotateLR(AVLTree &T)//quay kp Left-Right

    {AVLNode*T1 = T->pLeft;

    AVLNode*T2 = T1->pRight;

    T->pLeft= T2->pRight;

    T2->pRight= T;

    T1->pRight= T2->pLeft;

    T2->pLeft= T1;

    switch(T2->balFactor){

    case LH: T->balFactor = RH; T1->balFactor = EH; break;

    case EH: T->balFactor = EH; T1->balFactor = EH; break;

    case RH: T->balFactor = EH; T1->balFactor = LH; break;

    }

    T2->balFactor = EH;

    T = T2;

    }

    Chng 7: Cy (Tree)

    AVL Tree - Cn bng li cy AVL

    *

    Quay kep Right-Left

    void rotateRL(AVLTree &T)//quay kp Right-Left

    {AVLNode*T1 = T->pRight;

    AVLNode*T2 = T1->pLeft;

    T->pRight= T2->pLeft;

    T2->pLeft= T;

    T1->pLeft= T2->pRight;

    T2->pRight= T1;

    switch(T2->balFactor){

    case RH: T->balFactor = LH; T1->balFactor = EH; break;

    case EH: T->balFactor = EH; T1->balFactor = EH; break;

    case LH: T->balFactor = EH; T1->balFactor = RH; break;

    }

    T2->balFactor = EH;

    T = T2;

    }

    Chng 7: Cy (Tree)

    AVL Tree - Cn bng li cy AVL

    *

    Cn bng khi cy b lch v bn tri:

    int balanceLeft(AVLTree &T)

    //Cn bng khi cy b lch v bn tri

    {

    AVLNode*T1 = T->pLeft;

    switch(T1->balFactor){

    case LH:rotateLL(T); return 2;

    case EH:rotateLL(T); return 1;

    case RH:rotateLR(T); return 2;

    }

    return 0;

    }

    Chng 7: Cy (Tree)

    AVL Tree - Cn bng li cy AVL

    *

    Cn bng khi cy b lch v bn phi

    int balanceRight(AVLTree &T )

    //Cn bng khi cy b lch v bn phi

    {

    AVLNode*T1 = T->pRight;

    switch(T1->balFactor){

    case LH:rotateRL(T); return 2;

    case EH:rotateRR(T); return 1;

    case RH:rotateRR(T); return 2;

    }

    return 0;

    }

    Chng 7: Cy (Tree)

    AVL Tree - Thm mt phn t trn cy AVL

    Vic thm mt phn t vo cy AVL din ra tng t nh trn CNPTKSau khi thm xong, nu chiu cao ca cy thay i, t v tr thm vo, ta phi ln ngc ln gc kim tra xem c nt no b mt cn bng khng. Nu c, ta phi cn bng li nt nyVic cn bng li ch cn thc hin 1 ln ti ni mt cn bng Hm insertNode tr v gi tr 1, 0, 1 khi khng b nh, gp nt c hay thnh cng. Nu sau khi thm, chiu cao cy b tng, gi tr 2 s c tr v

    int insertNode(AVLTree &T, DataType X)

    *

    Chng 7: Cy (Tree)

    AVL Tree - Thm mt phn t trn cy AVL

    int insertNode(AVLTree &T, DataType X)

    {intres;

    if (T)

    {if (T->key == X) return 0; // c

    if (T->key > X)

    { res= insertNode(T->pLeft, X);

    if(res < 2) return res;

    switch(T->balFactor)

    {case RH: T->balFactor = EH; return 1;

    case EH: T->balFactor = LH; return 2;

    case LH: balanceLeft(T); return 1;

    }

    }

    ......................................................

    }

    *

    insertNode2

    Chng 7: Cy (Tree)

    AVL Tree - Thm mt phn t trn cy AVL

    int insertNode(AVLTree &T, DataType X)

    {

    ......................................................

    else // T->key < X

    { res= insertNode(T-> pRight, X);

    if(res < 2) return res;

    switch(T->balFactor)

    {case LH: T->balFactor= EH; return 1;

    case EH: T->balFactor= RH; return 2;

    case RH: balanceRight(T); return 1;

    }

    }

    ......................................................

    }

    *

    insertNode3

    Chng 7: Cy (Tree)

    AVL Tree - Thm mt phn t trn cy AVL

    int insertNode(AVLTree &T, DataType X)

    {

    ......................................................

    T= new TNode;

    if(T == NULL) return -1; //thiu b nh

    T->key = X;

    T->balFactor= EH;

    T->pLeft = T->pRight = NULL;

    return 2; // thnh cng, chiu cao tng

    }

    *

    Chng 7: Cy (Tree)

    AVL Tree - Hy mt phn t trn cy AVL

    Cng ging nh thao tc thm mt nt, vic hy mt phn t X ra khi cy AVL thc hin ging nh trn CNPTKSau khi hy, nu tnh cn bng ca cy b vi phm ta s thc hin vic cn bng liTuy nhin vic cn bng li trong thao tc hy s phc tp hn nhiu do c th xy ra phn ng dy chuynHm delNode tr v gi tr 1, 0 khi hy thnh cng hoc khng c X trong cy. Nu sau khi hy, chiu cao cy b gim, gi tr 2 s c tr v:

    int delNode(AVLTree &T, DataType X)

    *

    Chng 7: Cy (Tree)

    AVL Tree - Hy mt phn t trn cy AVL

    int delNode(AVLTree &T, DataType X)

    {intres;

    if(T==NULL)return 0;

    if(T->key > X)

    { res = delNode (T->pLeft, X);

    if(res < 2)return res;

    switch(T->balFactor)

    { case LH: T->balFactor = EH; return 2;

    case EH: T->balFactor = RH; return 1;

    case RH: return balanceRight(T);

    }

    } // if(T->key > X)

    ......................................................

    }

    *

    delNode2

    Chng 7: Cy (Tree)

    AVL Tree - Hy mt phn t trn cy AVL

    int delNode(AVLTree &T, DataType X)

    {

    ......................................................

    if(T->key < X)

    { res= delNode (T->pRight, X);

    if(res < 2)return res;

    switch(T->balFactor)

    { case RH: T->balFactor = EH; return 2;

    case EH: T->balFactor = LH; return 1;

    case LH: return balanceLeft(T);

    }

    } // if(T->key < X)

    ......................................................

    }

    *

    delNode3

    Chng 7: Cy (Tree)

    AVL Tree - Hy mt phn t trn cy AVL

    int delNode(AVLTree &T, DataType X)

    {......................................................

    else//T->key == X

    { AVLNode*p = T;

    if(T->pLeft == NULL) { T = T->pRight; res = 2; }

    else if(T->pRight == NULL) { T = T->pLeft; res = 2; }

    else //T c c 2 con

    { res = searchStandFor(p,T->pRight);

    if(res < 2) return res;

    switch(T->balFactor)

    { case RH: T->balFactor = EH; return 2;

    case EH: T->balFactor = LH; return 1;

    case LH: return balanceLeft(T);

    }

    }

    delete p; return res;

    }

    }

    *

    Chng 7: Cy (Tree)

    AVL Tree - Hy mt phn t trn cy AVL

    int searchStandFor(AVLTree &p, AVLTree &q)

    //Tm phn t th mng

    {intres;

    if(q->pLeft)

    { res= searchStandFor(p, q->pLeft);

    if(res < 2)return res;

    switch(q->balFactor)

    { case LH: q->balFactor = EH; return 2;

    case EH: q->balFactor = RH; return 1;

    case RH: return balanceRight(T);

    }

    } else

    { p->key = q->key; p = q; q = q->pRight; return 2;

    }

    }

    *

    Chng 7: Cy (Tree)

    AVL Tree

    *

    Nhn xt:Thao tc thm mt nt c phc tp O(1)Thao tc hy mt nt c phc tp O(h)Vi cy cn bng trung bnh 2 ln thm vo cy th cn mt ln cn bng li; 5 ln hy th cn mt ln cn bng li

    Chng 7: Cy (Tree)

    AVL Tree

    Nhn xt:Vic hy 1 nt c th phi cn bng dy chuyn cc nt t gc cho n phn t b hy trong khi thm vo ch cn 1 ln cn bng cc b di ng tm kim trung bnh trong cy cn bng gn bng cy cn bng hon ton log2n, nhng vic cn bng li n gin hn nhiuMt cy cn bng khng bao gi cao hn 45% cy cn bng hon ton tng ng d s nt trn cy l bao nhiu

    *

    =

    T

    X

    X

    T

    P

    P