如何通过改用非递归方式优化代码?
时间: 2024-11-05 22:31:01 浏览: 4
cpp代码-C++实现快速排序
通过改用非递归方式优化这段代码,可以采用迭代的方式来构建二叉树并遍历,避免递归带来的栈溢出风险。以下是将`create()`函数和遍历函数改为迭代版本的一个例子:
```cpp
// 使用栈辅助构建二叉树
t* create_iterative(int* d, int start, int end) {
if (start > end) return nullptr;
stack<pair<t*, int>> s;
s.push({nullptr, start});
while (!s.empty()) {
auto [node, idx] = s.top();
s.pop();
if (idx < end) {
node = new t();
node->data = d[idx];
idx++;
node->l = create_iterative(d, idx, end);
node->r = create_iterative(d, idx, end);
// 当找到空位插入新节点,推入栈中
if (node->l || node->r) s.push({node, idx});
}
}
return s.top().first;
}
// 非递归遍历函数
void iterative_preorder(t* root) {
stack<t*> traversal_stack;
traversal_stack.push(root);
while (!traversal_stack.empty()) {
t* current = traversal_stack.top();
traversal_stack.pop();
cout << current->data << ' ';
if (current->r) traversal_stack.push(current->r);
if (current->l) traversal_stack.push(current->l);
}
}
// 其他遍历方式类似,只需调整堆栈顺序即可
```
这样通过迭代控制栈的操作,不仅提高了内存使用效率,还避免了由于深度过大而导致的递归调用过快的问题。同时,迭代遍历更容易理解和维护。
阅读全文