#include<iostream>
#include<vector>
using namespace std;
//和链表的数据结构一样
struct TreeNode{
int value;
TreeNode* left;
TreeNode* right;
TreeNode(int x):value(x),left(NULL),right(NULL){}
};
void BST(TreeNode* node, TreeNode* insertnode){
//判断是否为空二叉树
/*
if(node == NULL){
node = insertnode;
}
*/
if(node->value > insertnode->value){
//插入左边
if(node->left == NULL){
node->left = insertnode;
}else{
BST(node->left, insertnode);
}
}else{
//插入右边
if(node->right == NULL){
node->right = insertnode;
}else{
BST(node->right, insertnode);
}
}
}
//先序遍历 先打印跟节点,左右
void preorder(TreeNode* node, int layer){
if(!node){
return; // void 类型,不可以return 0;
}
for(int i = 0; i <layer; i++ ){
cout<<"------";
}
cout<<node->value<<endl;
preorder(node->left, layer++);
preorder(node->right, layer++);
}
void postorder(TreeNode* node, int layer){
if(!node){
return; // void 类型,不可以return 0;
}
postorder(node->left, layer++);
postorder(node->right, layer++);
for(int i = 0; i <layer; i++ ){
cout<<"------";
}
cout<<node->value<<endl;
}
void inorder(TreeNode* node, int layer){ //中序
if(!node){
return; // void 类型,不可以return 0;
}
inorder(node->left, layer++);
for(int i = 0; i <layer; i++ ){
cout<<"------";
}
cout<<node->value<<endl;
inorder(node->right, layer++);
}
int main(){
TreeNode node(8);
std::vector<TreeNode*> node_vec;
int test[] = {3, 10, 1, 6, 15};
//动态数组的赋值
for(int i = 0; i < 5; i++){
node_vec.push_back( new TreeNode(test[i])); //
}
for(int i = 0; i < node_vec.size(); i++){
BST(&node,node_vec[i]);
}
preorder(&node, 0);
postorder(&node, 0);
inorder(&node, 0);
return 0;
}