#include <iostream>
#include <vector>
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 PreOrder(TreeNode* root, vector<int> &result) {
if(root == nullptr) {
return;
}
result.push_back(root->val);
cout << root->val << " ";
PreOrder(root->left, result);
PreOrder(root->right, result);
return;
}
void InOrder(TreeNode* root, vector<int> &result) {
if(root == nullptr) {
return;
}
InOrder(root->left, result);
result.push_back(root->val);
cout << root->val << " ";
InOrder(root->right, result);
return;
}
void BehOrder(TreeNode* root, vector<int> &result) {
if(root == nullptr) {
return;
}
BehOrder(root->left, result);
BehOrder(root->right, result);
result.push_back(root->val);
cout << root->val << " ";
return;
}
int main() {
TreeNode* root = new TreeNode{1,
new TreeNode{2,
new TreeNode{4},
new TreeNode{5},
},
new TreeNode{3,
new TreeNode{6},
new TreeNode{7},
},
};
vector<int> result;
PreOrder(root, result);
cout << endl;
InOrder(root, result);
cout << endl;
BehOrder(root, result);
cout << endl;
return 0;
}