1、前序遍历构造二叉树
#include<bits/stdc++.h>
using namespace std;
struct TreeNode
{
int val;
TreeNode* left;
TreeNode* mid;
TreeNode* right;
TreeNode(): val(0), left(nullptr), mid(nullptr), right(nullptr){}
TreeNode(int x): val(x), left(nullptr), mid(nullptr), right(nullptr){}
TreeNode(int x, TreeNode* left, TreeNode* mid, TreeNode* right):val(x), left(left), mid(mid), right(right){}
};
//创建二叉树的函数
void buildTree(TreeNode* &node){
cout << "please enter an int number:" << endl;
int data;
cin >> data;
if(data == -1){
node == NULL;
}
else{
TreeNode* temp = new TreeNode(data);
node = temp;
buildTree(node->left);
buildTree(node->mid);
buildTree(node->right);
}
}
//二叉树的前序遍历
void traversal(TreeNode* node, vector<int>&vec){
if(node == NULL){
return;
}
vec.push_back(node->val);
if(node->left){
traversal(node->left, vec);
}
if(node->mid){
traversal(node->mid, vec);
}
if(node->right){
traversal(node->right, vec);
}
}
//打印遍历数组的函数
void myPrint(vector<int>& vec){
for(int i = 0; i < vec.size(); i++){
cout << vec[i] << " ";
}
cout << endl;
}
int main(){
vector<int> vec;
TreeNode* root = new TreeNode();
buildTree(root);
traversal(root, vec);
myPrint(vec);
return 0;
}
2、层序遍历构造二叉树
#include<bits/stdc++.h>
using namespace std;
struct TreeNode
{
int val;
TreeNode* left;
TreeNode* right;
TreeNode() : val(0), left(nullptr), right(nullptr){}
TreeNode(int x) : val(x), left(nullptr), right(nullptr){}
TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right){}
};
//由层序遍历构造二叉树
void buildTree(TreeNode* &node, vector<int> &vec){
cout << "please enter an int number:" << endl;
int data;
cin >> data;
queue<TreeNode*> que; //创建一个空的队列,用于存放节点的地址
if(data != -1){
TreeNode* temp = new TreeNode(data);
node = temp;
que.push(node);
}
else{
node = NULL;
}
while(!que.empty()){
TreeNode* temp_node = que.front();
que.pop();
cout << "please enter an int number(left):" << endl;
cin >> data;
if(data == -1){
temp_node->left = NULL;
}
else{
temp_node->left = new TreeNode(data);
que.push(temp_node->left);
}
cout << "please enter an int number(right):" << endl;
cin >> data;
if(data == -1){
temp_node->left = NULL;
}
else{
temp_node->right = new TreeNode(data);
que.push(temp_node->right);
}
}
}
//二叉树的前序遍历
void traversal(TreeNode* node, vector<int> &vec){
if(node == nullptr) return;
vec.push_back(node->val);
if(node->left) traversal(node->left, vec);
if(node->right) traversal(node->right, vec);
}
//打印遍历数组的函数
void myPrint(vector<int>& vec){
for(int i = 0; i < vec.size(); i++){
cout << vec[i] << " ";
}
cout << endl;
}
int main(){
int nums[12] = {1,2,3,4,5,-1,-1,-1,-1,-1,-1};
vector<int> vec;
TreeNode* root = new TreeNode();
buildTree(root, vec);
traversal(root, vec);
myPrint(vec);
return 0;
}