- //有待完善~~~大家有什么意见可以说说啊~~~
- #include<iostream>
- using namespace std;
- struct NodeTree
- {
- int val;
- struct NodeTree * lefttree;
- struct NodeTree * righttree;
- NodeTree(int item, NodeTree *left = NULL, NodeTree *right = NULL)
- : val(item), lefttree(left), righttree(right) //构造函数默认的lefttree,righttree为NULL
- {
- }
- };
- class BinaryTree
- {
- public:
- BinaryTree(){root =NULL;}
- //迭带插入的方法建二叉搜索树
- void Insert(const int node)
- {
- NodeTree *currentpointer; //当前节点指针
- NodeTree *parentpointer; //父亲节点指针
- NodeTree *newpointer;
- //ptr必须为根节点指针的引用
- NodeTree *ptr = root;
- newpointer = new NodeTree(node); //新动态分配一个节点
- if(root == NULL) //如果此时树为空,返回新开辟的节点
- {
- root = newpointer;
- }
- else
- {
- currentpointer = ptr; //保存root指针
- //一直移动到是使parentpointer指向叶子节点而currentpointer为NULL
- while(currentpointer != NULL) //当当前节点不为空的情况下
- {
- parentpointer = currentpointer; //用指向父亲节点的指针保存当前指针
- if(currentpointer->val > node)
- {
- currentpointer = currentpointer->lefttree;
- }
- else
- {
- currentpointer = currentpointer->righttree;
- }
- }
- //以下是将节点插入
- if(parentpointer->val > node)
- {
- parentpointer->lefttree = newpointer;
- }
- else
- {
- parentpointer->righttree = newpointer;
- }
- }
- }
- //创建方法,依次插入
- NodeTree *Creat(int data[],int len)
- {
- for(int i=0; i<len; i++)
- {
- Insert(data[i]);
- }
- return root;
- }
- void PreOrder()
- {
- cout<<"前序遍历的结果为:";
- PrePrint(root);
- }
- void InOrder()
- {
- cout<<"中序遍历的结果为:";
- InPrint(root);
- }
- void PostOrder()
- {
- cout<<"后序遍历的结果为:";
- PostPrint(root);
- }
- void PrePrint(NodeTree *p) //前序遍历
- {
- if(p != NULL)
- {
- cout << p->val << ',';
- PrePrint(p->lefttree);
- PrePrint(p->righttree);
- }
- }
- void InPrint(NodeTree *p) //中序遍历
- {
- if(p != NULL)
- {
- InPrint(p->lefttree);
- cout<< p->val<<',';
- InPrint(p->righttree);
- }
- }
- void PostPrint(NodeTree *p) //后序遍历
- {
- if(p != NULL)
- {
- PostPrint(p->lefttree);
- PostPrint(p->righttree);
- cout<< p->val<< ',';
- }
- }
- protected:
- private:
- NodeTree *root;
- };
- void main()
- {
- BinaryTree tr;
- int a[10] = {6,5,7,2,1,3,8,4,10,9};
- tr.Creat(a ,10);
- tr.PreOrder();
- cout<<endl;
- tr.InOrder();
- cout<<endl;
- tr.PostOrder();
- cout<<endl;
- }