构造一棵二叉排序树并以三种方式进行输出
#include <iostream>
#include <cstdio>
#include <string>
#include <stdlib.h>
using namespace std;
struct Node{
int data;
Node* lChild;
Node* rChild;
Node(){}
Node(int d) : data(d),lChild(nullptr),rChild(nullptr){}
};
//通过递归的方式构建一颗二叉排序树
Node* insert(Node *root,int x){
if(root == nullptr){
root = new Node(x);
}else if(root->data < x){
root->rChild = insert(root->rChild,x);
}else if(root->data > x){
root->lChild = insert(root->lChild,x);
}
return root;
}
//先序遍历
void preOrder(Node *root){
if(root == nullptr){
return ;
}
printf("%d ",root->data);
preOrder(root->lChild);
preOrder(root->rChild);
}
//中序遍历
void inOrder(Node *root){
if(root == nullptr){
return ;
}
inOrder(root->lChild);
printf("%d ",root->data);
inOrder(root->rChild);
}
//后序遍历
void postOrder(Node *root){
if(root == nullptr){
return ;
}
postOrder(root->lChild);
postOrder(root->rChild);
printf("%d ",root->data);
}
// 根据输入的数值构造一棵二叉排序树
// 并以中序、先序和后序的方式输出该二叉排序树
void BuildETree(){
int n;
while(scanf("%d",&n)!= EOF){
Node *root = nullptr;
while(n--){
int x;
scanf("%d",&x);
root = insert(root,x);
}
preOrder(root);
printf("\n");
inOrder(root);
printf("\n");
postOrder(root);
printf("\n");
}
}
int main(){
BuildETree();
return 0;
}