binary treessomchai/spj/slides/... · 2005. 1. 15. · s. prasitjutrakul 1994 ต นไม...
TRANSCRIPT
-
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