diff --git a/poincare/include/poincare/tree_pool.h b/poincare/include/poincare/tree_pool.h index 83d4cd987..e88ed52a4 100644 --- a/poincare/include/poincare/tree_pool.h +++ b/poincare/include/poincare/tree_pool.h @@ -65,9 +65,11 @@ public: int numberOfNodes() const { int count = 0; - AllPool nodes = const_cast(this)->allNodes(); - for (TreeNode * t : nodes) { + TreeNode * firstNode = first(); + TreeNode * lastNode = last(); + while (firstNode != lastNode) { count++; + firstNode = firstNode->next(); } return count; } diff --git a/poincare/src/tree_node.cpp b/poincare/src/tree_node.cpp index 7e59cdbad..56c863bb3 100644 --- a/poincare/src/tree_node.cpp +++ b/poincare/src/tree_node.cpp @@ -93,8 +93,11 @@ TreeNode * TreeNode::editableRootTree() { int TreeNode::numberOfDescendants(bool includeSelf) const { int result = includeSelf ? 1 : 0; - for (TreeNode * child : depthFirstChildren()) { + TreeNode * nextSiblingNode = nextSibling(); + TreeNode * currentNode = next(); + while (currentNode != nextSiblingNode) { result++; + currentNode = currentNode->next(); } return result; }