Rev 2416 | Rev 2450 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2416 | Rev 2421 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | /* |
1 | /* |
2 | * Copyright (c) 2006 Vojtech Mencl |
2 | * Copyright (c) 2007 Vojtech Mencl |
3 | * All rights reserved. |
3 | * All rights reserved. |
4 | * |
4 | * |
5 | * Redistribution and use in source and binary forms, with or without |
5 | * Redistribution and use in source and binary forms, with or without |
6 | * modification, are permitted provided that the following conditions |
6 | * modification, are permitted provided that the following conditions |
7 | * are met: |
7 | * are met: |
Line 59... | Line 59... | ||
59 | /** Search first occurence of given key in AVL tree. |
59 | /** Search first occurence of given key in AVL tree. |
60 | * |
60 | * |
61 | * @param t AVL tree. |
61 | * @param t AVL tree. |
62 | * @param key Key to be searched. |
62 | * @param key Key to be searched. |
63 | * |
63 | * |
64 | * @return Pointer to value or NULL if there is no such key. |
64 | * @return Pointer to node or NULL if there is no such key. |
65 | */ |
65 | */ |
66 | avltree_node_t *avltree_search(avltree_t *t, uint64_t key) |
66 | avltree_node_t *avltree_search(avltree_t *t, uint64_t key) |
67 | { |
67 | { |
68 | avltree_node_t *p; |
68 | avltree_node_t *p; |
69 | 69 | ||
Line 82... | Line 82... | ||
82 | } |
82 | } |
83 | return NULL; |
83 | return NULL; |
84 | } |
84 | } |
85 | 85 | ||
86 | 86 | ||
- | 87 | /** Find node with smallest key in AVL tree. |
|
- | 88 | * |
|
- | 89 | * @param t AVL tree. |
|
- | 90 | * |
|
- | 91 | * @return Pointer to node or NULL if there is no node in the tree. |
|
- | 92 | */ |
|
- | 93 | avltree_node_t *avltree_find_min(avltree_t *t) |
|
- | 94 | { |
|
- | 95 | avltree_node_t *p = t->root; |
|
- | 96 | ||
- | 97 | /* |
|
- | 98 | * Check whether tree is empty. |
|
- | 99 | */ |
|
- | 100 | if (!p) return NULL; |
|
- | 101 | ||
- | 102 | /* |
|
- | 103 | * Iteratively descend to the leftmost leaf in the tree. |
|
- | 104 | */ |
|
- | 105 | while (p->lft != NULL) |
|
- | 106 | p = p->lft; |
|
- | 107 | ||
- | 108 | return p; |
|
- | 109 | } |
|
- | 110 | ||
87 | /** Insert new node into AVL tree. |
111 | /** Insert new node into AVL tree. |
88 | * |
112 | * |
89 | * @param t AVL tree. |
113 | * @param t AVL tree. |
90 | * @param newnode New node to be inserted. |
114 | * @param newnode New node to be inserted. |
91 | */ |
115 | */ |
Line 112... | Line 136... | ||
112 | * it si place of possible balance failure. |
136 | * it si place of possible balance failure. |
113 | */ |
137 | */ |
114 | dpc = &t->root; |
138 | dpc = &t->root; |
115 | gpa = NULL; |
139 | gpa = NULL; |
116 | top = t->root; |
140 | top = t->root; |
117 | while (par = *dpc) { |
141 | while ((par = (*dpc)) != NULL) { |
118 | if (par->balance != 0) { |
142 | if (par->balance != 0) { |
119 | top = par; |
143 | top = par; |
120 | } |
144 | } |
121 | gpa = par; |
145 | gpa = par; |
122 | dpc = par->key > key? &par->lft: &par->rgt; |
146 | dpc = par->key > key? &par->lft: &par->rgt; |
Line 668... | Line 692... | ||
668 | 692 | ||
669 | /** Delete node from AVL tree with the smallest key and set base of tree to that key. |
693 | /** Delete node from AVL tree with the smallest key and set base of tree to that key. |
670 | * |
694 | * |
671 | * @param t AVL tree structure. |
695 | * @param t AVL tree structure. |
672 | */ |
696 | */ |
673 | avltree_node_t *avltree_delete_min(avltree_t *t) |
697 | bool avltree_delete_min(avltree_t *t) |
674 | { |
698 | { |
675 | avltree_node_t *node; |
699 | avltree_node_t *node; |
676 | uint64_t key; |
700 | uint64_t key; |
677 | 701 | ||
678 | /* |
702 | /* |