7 changed files with 129 additions and 313 deletions
-
131include/tr/tree.h
-
8src/tree/Makefile.am
-
120src/tree/delete.c
-
37src/tree/inOrderSuccessor.c
-
44src/tree/insert.c
-
51src/tree/rotateLeft.c
-
51src/tree/rotateRight.c
@ -1,37 +0,0 @@ |
|||
/** |
|||
* \file |
|||
* |
|||
* \author Georg Hopp |
|||
* |
|||
* \copyright |
|||
* Copyright © 2012 Georg Hopp |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation, either version 3 of the License, or |
|||
* (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
*/ |
|||
|
|||
#include "tr/tree.h" |
|||
|
|||
TR_Tree |
|||
TR_inOrderSuccessor(TR_Tree this) |
|||
{ |
|||
this = TR_TREE_RIGHT(this); |
|||
|
|||
while (NULL != TR_TREE_LEFT(this)) { |
|||
this = TR_TREE_LEFT(this); |
|||
} |
|||
|
|||
return this; |
|||
} |
|||
|
|||
// vim: set ts=4 sw=4: |
|||
@ -1,51 +0,0 @@ |
|||
/** |
|||
* \file |
|||
* |
|||
* \author Georg Hopp |
|||
* |
|||
* \copyright |
|||
* Copyright © 2012 Georg Hopp |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation, either version 3 of the License, or |
|||
* (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
*/ |
|||
|
|||
#include "tr/tree.h" |
|||
|
|||
void |
|||
TR_treeRotateLeft(TR_Tree * this, TR_Tree node) |
|||
{ |
|||
TR_Tree rightChild = TR_TREE_RIGHT(node); |
|||
TR_Tree rcLeftSub = TR_TREE_RIGHT_LEFT(node); |
|||
|
|||
rightChild->left = node; |
|||
rightChild->parent = TR_TREE_PARENT(node); |
|||
node->right = rcLeftSub; |
|||
if (NULL != rcLeftSub) { |
|||
rcLeftSub->parent = node; |
|||
} |
|||
|
|||
if (NULL != TR_TREE_PARENT(node)) { |
|||
if (TR_TREE_PARENT(node)->left == node) { |
|||
TR_TREE_PARENT(node)->left = rightChild; |
|||
} else { |
|||
TR_TREE_PARENT(node)->right = rightChild; |
|||
} |
|||
} else { |
|||
*this = rightChild; |
|||
} |
|||
|
|||
node->parent = rightChild; |
|||
} |
|||
|
|||
// vim: set ts=4 sw=4: |
|||
@ -1,51 +0,0 @@ |
|||
/** |
|||
* \file |
|||
* |
|||
* \author Georg Hopp |
|||
* |
|||
* \copyright |
|||
* Copyright © 2012 Georg Hopp |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation, either version 3 of the License, or |
|||
* (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
*/ |
|||
|
|||
#include "tr/tree.h" |
|||
|
|||
void |
|||
TR_treeRotateRight(TR_Tree * this, TR_Tree node) |
|||
{ |
|||
TR_Tree leftChild = TR_TREE_LEFT(node); |
|||
TR_Tree lcRightSub = TR_TREE_LEFT_RIGHT(node); |
|||
|
|||
leftChild->right = node; |
|||
leftChild->parent = TR_TREE_PARENT(node); |
|||
node->left = lcRightSub; |
|||
if (NULL != lcRightSub) { |
|||
lcRightSub->parent = node; |
|||
} |
|||
|
|||
if (NULL != TR_TREE_PARENT(node)) { |
|||
if (TR_TREE_PARENT(node)->left == node) { |
|||
TR_TREE_PARENT(node)->left = leftChild; |
|||
} else { |
|||
TR_TREE_PARENT(node)->right = leftChild; |
|||
} |
|||
} else { |
|||
*this = leftChild; |
|||
} |
|||
|
|||
node->parent = leftChild; |
|||
} |
|||
|
|||
// vim: set ts=4 sw=4: |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue