建立两个类,一个结点类,一个树类,通过树类方法调用结点类的方法递归建树,二叉排序树中序输出得到从小到大排序的数列。
为了方便后面的相关操作,类的成员变量中定义一个father来记录父节点。
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
class Node
{
public:
int data;
Node *lchild;
Node *rchild;
Node *father;
Node(int _data, Node *_father = NULL){
data = _data;
lchild = NULL;
rchild = NULL;
father = _father;
}
~Node(){
if(lchild != NULL)
delete lchild;
if(rchild != NULL)
delete rchild;
}
void myinsert(int value){
if(data == value)
return;
else if(data > value){
if(lchild == NULL)
lchild = new Node(value, this);
else
lchild->myinsert(value);
}
else{
if(rchild == NULL)
rchild = new Node(value, this);
else
rchild->myinsert(value);
}
}
void inOrder(){
if(lchild != NULL)
lchild->inOrder();
cout << data <<" ";
if(rchild != NULL)
rchild->inOrder();
}
};
class BinaryTree
{
private:
Node *root;
public:
BinaryTree(){
root = NULL;
}
~BinaryTree(){
if(root != NULL)
delete root;
}
void myinsert(int value){
if(root == NULL)
root = new Node(value);
else
root->myinsert(value);
}
void inOrder(){
if(root != NULL)
root->inOrder();
else
cout << "binarytree is empty!!!";
}
};
int main(){
int n;
BinaryTree binarytree;
int temp[] = {1, 2, 0, -1, 2333, 1111, 5, 4, 7, 14, 418};
for(int i=0; i<11; i++){
binarytree.myinsert(temp[i]);
}
binarytree.inOrder();
cout<<endl;
system("pause");
return 0;
}
如有疑问或错误,欢迎提出,谢谢