设计程序,实现迭代式先序遍历算法?分析所设计算法的时间复杂度。C代码
时间: 2024-10-24 15:06:53 浏览: 22
设计一个迭代式先序遍历(Preorder Traversal)的算法,通常我们采用递归的方式来实现,但在迭代版本中,我们可以借助栈来存储待访问的节点。这里是一个简单的C++代码示例:
```cpp
#include <iostream>
using namespace std;
// 定义二叉树节点
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 迭代式先序遍历函数
void iterativePreorder(TreeNode* root) {
if (root == nullptr) return;
stack<TreeNode*> s;
s.push(root);
while (!s.empty()) {
TreeNode* node = s.top();
cout << node->val << " "; // 访问当前节点
if (node->right) s.push(node->right); // 先右子节点
if (node->left) s.push(node->left); // 后左子节点
s.pop(); // 出栈已访问节点
}
}
int main() {
// 初始化你的二叉树...
TreeNode* root = ...; // 假设已经构建好二叉树
iterativePreorder(root);
return 0;
}
```
时间复杂度分析:
- 迭代式先序遍历的时间复杂度为O(n),其中n是二叉树的节点数。这是因为每个节点都会恰好被访问一次,并且每次访问都需要常量时间完成。所以总的次数等于节点总数。
阅读全文