您的位置:首页 > 其它

二叉树的建立

2014-05-12 20:13 155 查看
template<class T>
class BiTreeNode
{
public:
T data;
BiTreeNode *lchild,*rchild;
BiTreeNode():data(0),lchild(NULL),rchild(NULL){}
};

template<class T>
class BiTree
{
public:

private:
vector<BiTreeNode<T>* > _biTree;
public:
BiTree(vector<T>& vec){buildBiTree(vec);}
void buildBiTree(vector<T>&);
void TraverseBiTree();
void TraverseTreeNode(BiTreeNode<T>* );
vector<BiTreeNode<T>* > getBiTree(){return _biTree;}
};

template<class T>
void BiTree<T>::buildBiTree(vector<T>& _vec)
{
//暂存节点的栈
deque<BiTreeNode<T>*>  NodeStack;
vector<T>::iterator iter=begin(_vec);
BiTreeNode<T>* _root=new BiTreeNode<T>();
_biTree.push_back(_root);
_root->data=(*iter);
NodeStack.push_back(_root);
++iter;
BiTreeNode<T>* pre;
for(int count=1;iter!=end(_vec);++iter,++count)
{
BiTreeNode<T>* new_Node=new BiTreeNode<T>();
_biTree.push_back(new_Node);
new_Node->data=(*iter);

if(count%2!=0)  //lchild
{
pre=NodeStack.front();
NodeStack.pop_front();
pre->lchild=new_Node;
NodeStack.push_back(new_Node);
}
else  //rchild
{
pre->rchild=new_Node;

NodeStack.push_back(new_Node);
}
}
}

template<class T>
void BiTree<T>::TraverseBiTree()
{
TraverseTreeNode(*(begin(_biTree)));
cout<<endl;
}

template<class T>
void BiTree<T>::TraverseTreeNode(BiTreeNode<T>* _node)
{
if(_node!=NULL)
{
TraverseTreeNode(_node->lchild);
TraverseTreeNode(_node->rchild);
cout<<_node->data<<" ";
}
}

int main()
{
vector<int> ivec;
for(int i=0;i<10;++i)
{
int n=rand()%10;
ivec.push_back(n);
}
cout<<"before sort"<<endl;
for(vector<int>::iterator iter=begin(ivec);iter!=end(ivec);++iter)
{
cout<<*iter<<" ";
}
cout<<endl;
BiTree<int> bt(ivec);

bt.TraverseBiTree();
cout<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: