Binarytree的先序创建与先序中序后序遍历
#include<queue>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define Binarytreemalloc (Binarytreepointer) malloc (sizeof(Binarytree))
using namespace std;
typedef struct Binarytree {
int data;
Binarytree *leftson, *rightson;
} Binarytree, *Binarytreepointer;
queue<int> node;
//-1为空结点标志
void preordercreate(Binarytreepointer current) {
current->data = node.front(); node.pop();
if(node.front() != -1) {
Binarytreepointer leftson = Binarytreemalloc;
current->leftson = leftson;
preordercreate(leftson);
} else {
current->leftson = nullptr;
node.pop();
}
if(node.front() != -1) {
Binarytreepointer rightson = Binarytreemalloc;
current->rightson = rightson;
preordercreate(rightson);
} else {
current->rightson = nullptr;
node.pop();
}
}
void preorder_traverse(Binarytreepointer current) {
cout << current->data << " ";
if(current->leftson) preorder_traverse(current->leftson);
if(current->rightson) preorder_traverse(current->rightson);
}
void inorder_traverse(Binarytreepointer current) {
if(current->leftson) inorder_traverse(current->leftson);
cout << current->data << " ";
if(current->rightson) inorder_traverse(current->rightson);
}
void postorder_traverse(Binarytreepointer current) {
if(current->leftson) postorder_traverse(current->leftson);
if(current->rightson) postorder_traverse(current->rightson);
cout << current->data << " ";
}
void Binarytree_Destory(Binarytreepointer current) {
if(current->leftson) Binarytree_Destory(current->leftson);
if(current->rightson) Binarytree_Destory(current->rightson);
free(current);
}
int main() {
int nexnode;
//按先序输出结点值,-1表示为空
while(cin >> nexnode) node.push(nexnode);
Binarytreepointer root = Binarytreemalloc;
preordercreate(root);
cout << "preorder_traverse:" << endl; preorder_traverse(root); cout << endl;
cout << "inorder_traverse:" << endl; inorder_traverse(root); cout << endl;
cout << "postorder_traverse:" << endl; postorder_traverse(root); cout << endl;
Binarytree_Destory(root);
return 0;
}
/*
test case:
1 2 -1 4 -1 -1 3 5 -1 6 -1 -1 -1
*/