二叉树
节点的存储结构
三种遍历方式代码实现
#include<bits/stdc++.h>
using namespace std;
template<class T> //二叉树节点设置
struct BiNode
{ //二叉树的节点分为三部分
T data; //数据部分、左孩子、右孩子
BiNode<T>*lchild,*rchild;
};
template<class T>
class BiTree
{
public:
BiTree(){root=NULL; }
BiTree(BiNode<T>*root){}
~BiTree();
void PreOrder(BiNode<T>*root); //前序遍历
void InOrder(BiNode<T>*root); //中序遍历
void PostOrder(BiNode<T>*root); //后序遍历
void LevelOrder(BiNode<T>*root); //层次遍历
private:
BiNode<T>*root;
void Creat(BiNode<T>*root);
void Release(BiNode<T>*root);
};
template<class T>
void BiTree<T>::PreOrder(BiNode<T> *root)
{
if(root==NULL)return ;
else
{ cout<<root->data;
PreOrder(root->ichild);
PreOrder(root->rchild);
}
}
template<class T>
void BiTree<T>::InOrder(BiNode<T>*root)
{
if(root==NULL)return ;
else
{InOrder(root->lchild);
cout<<root->data;
InOrder(root->rchild);
}
}
template<class T>
void BiTree<T>::PostOrder(BiNode<T>*root)
{
if(root=NULL)return;
else
{
PostOrder(root->rchild);
PostOrder(root->rchild);
cout<<root->data;
}
}
template<class T>
void LevelOrder(BiTree<T>*root) //层次遍历
{
queue<BiTree<T>*>aQueue;
BiTree<T>*pointer=root;
if(pointer)
aQueue.push(pointer);
while(!aQueue.empty())
{
pointer=aQueue.front();
aQueue.pop();
cout<<pointer->data;
if(pointer->lchild)
aQueue.push(pointer->lchild);
if(pointer->rchild)
aQueue.push(pointer->rchild);
}
}
int main()
{
return 0;
}
二叉树的创建代码实现
#include<bits/stdc++.h>
using namespace std;
template<class T>
struct BiNode
{
T data;
BiNode<T> *lchild,*rchild;
};
template<class T>
class BiTree
{
public:
BiTree(){root=NULL;}
BiTree(BiNode<T>*root);
~BiTree();
private:
BiNode<T>*root;
void Creat(BiNode<T>*root);
void Release(BiNode<T>*root);
};
template<class T>
void BiTree<T>::Creat(BiNode<T>*root)
{
char ch;
cin>>ch;
if(ch=='#') root=NULL;
else
{
root=new BiNode<T>;
root->data=ch;
creat(root->lchild);
creat(root->rchild);
}
}
int main()
{
}