Skip to content

Commit 4ed8098

Browse files
committed
delete() for Splay Tree
1 parent 23ce3e0 commit 4ed8098

File tree

2 files changed

+35
-17
lines changed

2 files changed

+35
-17
lines changed

pydatastructs/trees/_backend/cpp/SplayTree.hpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,27 @@ static PyObject* SplayTree_insert(SplayTree *self, PyObject* args) {
139139
Py_RETURN_NONE;
140140
}
141141

142+
static PyObject* SplayTree_delete(SplayTree *self, PyObject* args) {
143+
PyObject* x = PyObject_GetItem(args, PyZero);
144+
BinaryTree* bt = self->sbbt->bst->binary_tree;
145+
146+
PyObject* kwd_parent = PyDict_New();
147+
PyDict_SetItemString(kwd_parent, "parent", PyLong_FromLong(1));
148+
PyObject* tup = SelfBalancingBinaryTree_search(self->sbbt, Py_BuildValue("(O)", x), kwd_parent);
149+
PyObject* e = PyTuple_GetItem(tup, 0);
150+
PyObject* p = PyTuple_GetItem(tup, 1);
151+
if (e == Py_None){
152+
Py_RETURN_NONE;
153+
}
154+
SplayTree_splay(self, Py_BuildValue("(OO)", e, p));
155+
PyObject* status = SelfBalancingBinaryTree_delete(self->sbbt, Py_BuildValue("(O)", x), PyDict_New());
156+
return status;
157+
}
158+
142159

143160
static struct PyMethodDef SplayTree_PyMethodDef[] = {
144161
{"insert", (PyCFunction) SplayTree_insert, METH_VARARGS, NULL},
162+
{"delete", (PyCFunction) SplayTree_delete, METH_VARARGS, NULL},
145163
{NULL}
146164
};
147165

pydatastructs/trees/tests/test_binary_trees.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -503,28 +503,28 @@ def test_SplayTree():
503503
assert [node.key for node in in_order] == [20, 30, 40, 50, 55, 100, 200]
504504
assert [node.key for node in pre_order] == [55, 30, 20, 40, 50, 200, 100]
505505

506-
# t.delete(40)
506+
t.delete(40)
507507

508-
# in_order = trav.depth_first_search(order='in_order')
509-
# pre_order = trav.depth_first_search(order='pre_order')
510-
# assert [node.key for node in in_order] == [20, 30, 50, 55, 100, 200]
511-
# assert [node.key for node in pre_order] == [50, 30, 20, 55, 200, 100]
508+
in_order = trav.depth_first_search(order='in_order')
509+
pre_order = trav.depth_first_search(order='pre_order')
510+
assert [node.key for node in in_order] == [20, 30, 50, 55, 100, 200]
511+
assert [node.key for node in pre_order] == [50, 30, 20, 55, 200, 100]
512512

513-
# t.delete(150)
513+
t.delete(150)
514514

515-
# in_order = trav.depth_first_search(order='in_order')
516-
# pre_order = trav.depth_first_search(order='pre_order')
517-
# assert [node.key for node in in_order] == [20, 30, 50, 55, 100, 200]
518-
# assert [node.key for node in pre_order] == [50, 30, 20, 55, 200, 100]
515+
in_order = trav.depth_first_search(order='in_order')
516+
pre_order = trav.depth_first_search(order='pre_order')
517+
assert [node.key for node in in_order] == [20, 30, 50, 55, 100, 200]
518+
assert [node.key for node in pre_order] == [50, 30, 20, 55, 200, 100]
519519

520-
# t1 = SplayTree(1000, 1000)
521-
# t1.insert(2000, 2000)
520+
t1 = SplayTree(1000, 1000)
521+
t1.insert(2000, 2000)
522522

523-
# trav = BinaryTreeTraversal(t1)
524-
# in_order = trav.depth_first_search(order='in_order')
525-
# pre_order = trav.depth_first_search(order='pre_order')
526-
# assert [node.key for node in in_order] == [1000, 2000]
527-
# assert [node.key for node in pre_order] == [2000, 1000]
523+
trav = BinaryTreeTraversal(t1)
524+
in_order = trav.depth_first_search(order='in_order')
525+
pre_order = trav.depth_first_search(order='pre_order')
526+
assert [node.key for node in in_order] == [1000, 2000]
527+
assert [node.key for node in pre_order] == [2000, 1000]
528528

529529
# t.join(t1)
530530

0 commit comments

Comments
 (0)