7
7
#include < cstdlib>
8
8
#include < iostream>
9
9
#include < stack>
10
+ #include < string>
10
11
#include " ../../../utils/_backend/cpp/utils.hpp"
11
12
#include " ../../../utils/_backend/cpp/TreeNode.hpp"
12
13
#include " ../../../linear_data_structures/_backend/cpp/arrays/ArrayForTrees.hpp"
@@ -42,10 +43,10 @@ static PyObject* BinaryTreeTraversal___new__(PyTypeObject* type, PyObject *args,
42
43
}
43
44
44
45
static PyObject* BinaryTreeTraversal__pre_order (BinaryTreeTraversal* self, PyObject *args){
46
+ long node = PyLong_AsLong (PyObject_GetItem (args, PyZero));
45
47
PyObject* visit = PyList_New (0 );
46
48
ArrayForTrees* tree = self->tree ->tree ;
47
49
long size = self->tree ->size ;
48
- long node = PyLong_AsLong (PyObject_GetItem (args, PyZero));
49
50
std::stack<long > s;
50
51
s.push (node);
51
52
@@ -64,8 +65,29 @@ static PyObject* BinaryTreeTraversal__pre_order(BinaryTreeTraversal* self, PyObj
64
65
return visit;
65
66
}
66
67
68
+ static PyObject* BinaryTreeTraversal_depth_first_search (BinaryTreeTraversal* self, PyObject *args, PyObject *kwds) {
69
+ Py_INCREF (Py_None);
70
+ PyObject* node = Py_None;
71
+ PyObject* order = PyUnicode_FromString (" in_order" );
72
+ static char * keywords[] = {" node" ," order" , NULL };
73
+ if (!PyArg_ParseTupleAndKeywords (args, kwds, " |OO" , keywords, &node, &order)) {
74
+ return NULL ;
75
+ }
76
+ if (node == Py_None) {
77
+ node = self->tree ->root_idx ;
78
+ }
79
+ if (PyUnicode_Compare (order, PyUnicode_FromString (" pre_order" )) == 0 ) {
80
+ return BinaryTreeTraversal__pre_order (self, Py_BuildValue (" (O)" , node));
81
+ }
82
+ else {
83
+ PyErr_SetString (PyExc_NotImplementedError, " This traversal is not implemented yet or does not exist. Supported traversals: \" pre_order\" " );
84
+ return NULL ;
85
+ }
86
+ }
87
+
67
88
static struct PyMethodDef BinaryTreeTraversal_PyMethodDef[] = {
68
89
{" _pre_order" , (PyCFunction) BinaryTreeTraversal__pre_order, METH_VARARGS, NULL },
90
+ {" depth_first_search" , (PyCFunction) BinaryTreeTraversal_depth_first_search, METH_VARARGS | METH_KEYWORDS, NULL },
69
91
{NULL }
70
92
};
71
93
0 commit comments