Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
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