7 changed files with 129 additions and 313 deletions
-
105include/tr/tree.h
-
8src/tree/Makefile.am
-
116src/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