#include<bits/stdc++.h>
using namespace std;
struct Treenode{
int val;
Treenode* left;
Treenode* right;
Treenode(int x) : val(x), left(nullptr), right(nullptr){}
};
Treenode* InsertTree(Treenode* root, int n){
if(root == nullptr){
return new Treenode(n);
}
if(n < root -> val){
root -> left = InsertTree(root -> left, n);
}
else if(n > root-> val){
root -> right = InsertTree(root -> right, n);
}
return root;
}
void Preorder(Treenode* root){
if(root == nullptr)
return;
else{
cout << root -> val << " ";
Preorder(root -> left);
Preorder(root -> right);
}
}
void Inorder(Treenode* root){
if(root == nullptr){
return;
}
else{
Inorder(root -> left);
cout << root -> val << " ";
Inorder(root -> right);
}
}
void Postorder(Treenode* root){
if(root == nullptr){
return;
}
else{
Postorder(root -> left);
Postorder(root -> right);
cout << root -> val << " ";
}
}
int main(){
int n;
while(cin >> n){
Treenode* root = nullptr;
for(int i = 0; i < n; i++){
int val;
cin >> val;
root = InsertTree(root, val);
}
Preorder(root);
cout << endl;
Inorder(root);
cout << endl;
Postorder(root);
cout << endl;
}
return 0;
}
犯的错误:在main()函数中忘记更新root,导致root始终为空没有输出;后序遍历root->val误写成root;
后续可有的改进思路:将三种遍历得到的数字顺序存储成vector容器,方便除了仅输出之外可能有的其他操作

京公网安备 11010502036488号