Not OP, but they probably mean something like the following toy problem (in C++):
struct BinTree {
long value;
BinTree *left;
BinTree *right;
};
long long RecursiveDFSSum(BinTree *node) {
if (NULL == node) {
return 0;
}
return (long long)value + RecursiveDFSSum(node->left) + RecursiveDFSSum(node->right);
}
long long IterativeDFSSum(BinTree *tree) {
std::vector<BinTree *> custom_stack;
custom_stack.push_back(tree);
long long value = 0;
while (!custom_stack.empty()) {
BinTree *node = *custom_stack.rbegin();
custom_stack.pop_back();
if (NULL != node) {
value += node->value;
custom_stack.push_back(node->left);
custom_stack.push_back(node->right);
}
}
return value;
}
Did not check this actually compiles etc. but you get the point. Both ways will give you the same solution in the same way, time complexity, space complexity etc. but the second one is not bound by max call stack size (only by max heap size). Additionally, the second one is slightly more space efficient, since the recursive solution requires saving an entire call frame into the stack (e.g. stack pointer, return address) whereas the iterative solution just stores one pointer per stack item.