这个二叉树只是简单的写出了创建的思想及存储结构,没有考虑一些细节性的东西,
#include<iostream>
using namespace std;
class Tree;
class TreeNode
{
friend class Tree;
TreeNode():Lchild(NULL),Rchild(NULL){}
TreeNode(int d,TreeNode *l = NULL,TreeNode *r = NULL):data(d),Lchild(l),Rchild(r){}
TreeNode& operator=(TreeNode&node)
{
this->data=node.data;
this->Lchild=node.Lchild;
this->Rchild=node.Rchild;
}
TreeNode(TreeNode &node)
{
this->data=node.data;
this->Lchild=node.Lchild;
this->Rchild=node.Rchild;
}
private:
int data;
TreeNode *Lchild;
TreeNode *Rchild;
};
class Tree
{
public:
Tree(){first=new TreeNode;}
void build_Tree();
void show_Tree(TreeNode &);
TreeNode & getNode(){return *first;}
private:
TreeNode *first;
};
#include"Tree.h"
#include<cstdio>
void Tree::build_Tree()
{
int id;
cin>>id;
TreeNode *root=new TreeNode(id);
first=root;
TreeNode *currentNode;
currentNode=root;
while(true)
{
setbuf(stdin,NULL);
cin.clear();
char ch;
cout<<"输入l,向左子树插入元素,输入r向右子树插入元素.其他则退出建树";
cin>>ch;
setbuf(stdin,NULL);
cin.clear();
int da;
cin>>da;
TreeNode *newNode=new TreeNode(da);
switch(ch)
{
case 'l':currentNode->Lchild=newNode;
currentNode=newNode; break;
case 'r': currentNode->Rchild=newNode;
currentNode=newNode; break;
default :return ;
}
}
}
void Tree::show_Tree(TreeNode &root)
{
if(&root==NULL)
return ;
else
{
cout<<root.data<<endl;
show_Tree(*(root.Lchild));
show_Tree(*(root.Rchild));
}
}
int main()
{
Tree tree;
tree.build_Tree();
tree.show_Tree(tree.getNode());
return 0;
}