#include <iostream>
using namespace std;
//单个孩子
struct BiTree{
int data; //数据
BiTree * left; //左
BiTree * right; //右
};
//插入一个节点
BiTree * insertNode(BiTree * pRoot,int node){
BiTree * pCurrNode; //当前节点
BiTree * pParentNode = nullptr; //父亲节点
BiTree * pNewNode = new BiTree; //新节点
pNewNode->data = node; //保存数据
pNewNode->right= NULL; //init right
pNewNode->left = NULL; //init left
if(pRoot==NULL){
return pNewNode;
}else{
pCurrNode = pRoot;
while(pCurrNode!=NULL){
pParentNode = pCurrNode;
//寻找空的节点进行插入
(node < pCurrNode->data) ? pCurrNode=pCurrNode->left : pCurrNode=pCurrNode->right;
}
(pParentNode->data > node) ? pParentNode->left=pNewNode : pParentNode->right=pNewNode;
}
return pRoot;
}
//创建二叉树
BiTree * createBiTree(int data[],int len){
BiTree * pRoot = NULL; //根
for(int i=0;i<len;i++){
pRoot = insertNode(pRoot,data[i]);
}
return pRoot;
}
//打印二叉树
void printBiTree(BiTree * pRoot){
BiTree * pPointer = pRoot->left;
if(pPointer!=NULL){
cout<<"->树的左子树节点"<<endl;
}
if(pRoot!=NULL) cout<<"["<<pRoot->data<<"]";
while (pPointer!=NULL) {
cout<<"["<<pPointer->data<<"]";
pPointer = pPointer->left;
}
if(pPointer!=NULL) cout<<endl;
pPointer = pRoot->right;
if(pPointer!=NULL){
cout<<"\n->树的右子树节点"<<endl;
}
while (pPointer!=NULL) {
cout<<"["<<pPointer->data<<"]";
pPointer = pPointer->right;
}
if(pPointer!=NULL) cout<<endl;
}
//前序遍历
void PreOder(BiTree * pPointer){
if(pPointer!=NULL){
cout<<"["<<pPointer->data<<"]";
PreOder(pPointer->left);
PreOder(pPointer->right);
}
}
//释放资源
void Release(BiTree * pRoot){
if(pRoot==NULL){
return ;
}
Release(pRoot->left);
Release(pRoot->right);
delete pRoot;
pRoot = NULL;
}
int main(){
cout<<"请输入节点数:"<<endl;
int num; cin>>num; (num>100)?num=100:(num<1)?num=1:num;
int * data = new int[num];
cout<<"请输入"<<num<<"个节点的数据:"<<endl;
for(int i=0;i<num;i++){
cin>>data[i];
}
cout<<"二叉树创建中...."<<endl;
auto biTree = createBiTree(data,num);
cout<<"创建完成,打印如下:"<<endl;
PreOder(biTree);
cout<<"\n资源释放中...."<<endl;
Release(biTree);
delete[] data;
data = NULL;
cout<<"资源释放成功!"<<endl;
return 0;
}