用c++编写算法对二叉树进行前序遍历
时间: 2023-06-24 12:04:48 浏览: 131
二叉树前序遍历算法可以使用递归或非递归的方式实现,以下是非递归方式的示例代码:
```cpp
#include <iostream>
#include <stack>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void preorderTraversal(TreeNode* root) {
if (!root) return;
stack<TreeNode*> s;
s.push(root);
while (!s.empty()) {
TreeNode* node = s.top(); s.pop();
cout << node->val << " ";
if (node->right) s.push(node->right);
if (node->left) s.push(node->left);
}
}
int main() {
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(7);
cout << "Preorder Traversal: ";
preorderTraversal(root);
cout << endl;
return 0;
}
```
输出为:`Preorder Traversal: 1 2 4 5 3 6 7`。
在这个算法中,我们使用一个栈来模拟递归调用过程。我们首先将根节点压入栈中,然后从栈中弹出节点并打印它的值。我们接着将右子节点压入栈中(如果有的话)并将左子节点压入栈中(如果有的话),因为前序遍历的顺序是先访问左子树再访问右子树。当栈为空时,我们遍历完了整棵树。
阅读全文