#pragma once
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x),left(NULL),right(NULL) {}
};
TreeNode* initBTree(int elements[], int size);
void preOrder(TreeNode* root, vector<int> &result);
void inOrder(TreeNode* root, vector<int> &result);
void postOrder(TreeNode* root, vector<int> &result);
void traverse(vector<int> nums);
#include "binaryTree.h"
TreeNode* initBTree(int elements[], int size){
if(size < 1){
return NULL;
}
TreeNode **nodes = new TreeNode*[size];
for(int i = 0; i < size; i++){
if(elements[i] == 0){
nodes[i] = NULL;
}else{
nodes[i] = new TreeNode(elements[i]);
}
}
queue<TreeNode*> nodeQueue;
nodeQueue.push(nodes[0]);
TreeNode *node;
int index = 1;
while(index < size){
node = nodeQueue.front();
nodeQueue.pop();
nodeQueue.push(nodes[index++]);
node->left = nodeQueue.back();
nodeQueue.push(nodes[index++]);
node->right = nodeQueue.back();
}
return *nodes;
}
void preOrder(TreeNode* root, vector<int> &result){
if(root){
result.push_back(root->val);
preOrder(root->left,result);
preOrder(root->right,result);
}
}
void inOrder(TreeNode* root, vector<int> &result){
if(root){
inOrder(root->left, result);
result.push_back(root->val);
inOrder(root->right,result);
}
}
void postOrder(TreeNode* root, vector<int> &result){
if(root){
postOrder(root->left, result);
postOrder(root->right,result);
result.push_back(root->val);
}
}
void traverse(vector<int> nums){
int length = nums.size();
for(int i = 0; i < length; i++){
cout<<nums[i]<<' ';
}
cout<<endl;
}
int main(){
int nums[] = {1,2,3,4,0,5,6,0,7};
TreeNode *root = initBTree(nums, 9);
vector<int> preResult;
vector<int> inResult;
vector<int> postResult;
preOrder(root, preResult);
inOrder(root, inResult);
postOrder(root, postResult);
cout<<"前序遍历的结果:" <<'\n';
traverse(preResult);
cout<<"中序遍历的结果:" <<'\n';
traverse(inResult);
cout<<"后序遍历的结果:" <<'\n';
traverse(postResult);
return 0;
}```