用c++实现二叉树的先序遍历和层次遍历
时间: 2023-10-30 12:30:46 浏览: 85
好的,下面是用C++实现二叉树的先序遍历和层次遍历的代码:
```c++
#include <iostream>
#include <queue>
using namespace std;
// 二叉树的节点结构体
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
// 递归实现二叉树的先序遍历
void preOrder(TreeNode* root) {
if (root == nullptr) {
return;
}
cout << root->val << " ";
preOrder(root->left);
preOrder(root->right);
}
// 非递归实现二叉树的先序遍历
void preOrderNonRecursive(TreeNode* root) {
if (root == nullptr) {
return;
}
stack<TreeNode*> st;
st.push(root);
while (!st.empty()) {
TreeNode* node = st.top();
st.pop();
cout << node->val << " ";
if (node->right != nullptr) {
st.push(node->right);
}
if (node->left != nullptr) {
st.push(node->left);
}
}
}
// 二叉树的层次遍历
void levelOrder(TreeNode* root) {
if (root == nullptr) {
return;
}
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
int size = q.size();
for (int i = 0; i < size; i++) {
TreeNode* node = q.front();
q.pop();
cout << node->val << " ";
if (node->left != nullptr) {
q.push(node->left);
}
if (node->right != nullptr) {
q.push(node->right);
}
}
}
}
int main() {
// 创建一个二叉树[1,null,2,3]
TreeNode* root = new TreeNode(1);
root->right = new TreeNode(2);
root->right->left = new TreeNode(3);
// 先序遍历
cout << "先序遍历:";
preOrder(root);
cout << endl;
// 非递归实现先序遍历
cout << "非递归实现先序遍历:";
preOrderNonRecursive(root);
cout << endl;
// 层次遍历
cout << "层次遍历:";
levelOrder(root);
cout << endl;
return 0;
}
```
希望能解答您的问题,如有不明白的地方可以继续提问哦~
阅读全文