C++实现链式二叉树,操作包括初始化二叉树、前序遍历、中序遍历、后序遍历、层次遍历
- // BinaryTree.cpp : 定义控制台应用程序的入口点。
- //C++实现链式二叉树,操作包括初始化二叉树、前序遍历、中序遍历、后序遍历、层次遍历、树的深度
- #include "stdafx.h"
- #include<iostream>
- #include<string>
- using namespace std;
- template<class T>
- struct BiNode
- {
- T data;
- struct BiNode<T> *rchild,*lchild;
- };
- template<class T>
- class BiTree
- {
- public:
- BiTree(){
- cout<<"请输入根节点:"<<endl;
- Create(root);
- if (NULL != root)
- {
- cout<<"root="<<root->data<<endl;
- }
- else
- {
- cout << "The BinaryTree is empty." << endl;
- }
- }
- ~BiTree(){Release(root);}
- void PreOrder(){PreOrder(root);}
- void InOrder(){InOrder(root);}
- void PostOrder(){PostOrder(root);}
- void LeverOrder();
- int Depth(){return Depth(root);}
- private:
- BiNode<T> *root;
- void Create(BiNode<T>* &bt);
- void Release(BiNode<T> *bt);
- void PreOrder(BiNode<T> *bt);
- void InOrder(BiNode<T> *bt);
- void PostOrder(BiNode<T> *bt);
- int Depth(BiNode<T>* bt);
- };
- //前序遍历
- template <class T>
- void BiTree<T>::PreOrder(BiNode<T> *bt)
- {
- if(bt==NULL)return;
- else
- {
- cout<<bt->data<<" ";
- PreOrder(bt->lchild );
- PreOrder( bt->rchild );
- }
- }
- //中序遍历
- template <class T>
- void BiTree<T>::InOrder(BiNode<T> *bt)
- {
- if(bt==NULL) return ;
- else
- {
- InOrder(bt->lchild );
- cout<<bt->data<<" ";
- InOrder(bt->rchild );
- }
- }
- //后续遍历
- template <class T>
- void BiTree<T>::PostOrder(BiNode<T> *bt)
- {
- if(bt==NULL)return ;
- else
- {
- PostOrder(bt->lchild );
- PostOrder(bt->rchild );
- cout<<bt->data<<" ";
- }
- }
- //层序遍历
- template<class T>
- void BiTree<T>::LeverOrder()
- {
- int const MaxSize=1000;
- BiNode<T> *Q[MaxSize];
- int front, rear;
- BiNode<T> *p;
- front=rear=-1;
- if(root==NULL) return ;
- Q[++rear]=root;
- while(front!=rear)
- {
- p=Q[++front];
- cout<<p->data<<" ";
- if(p->lchild !=NULL) Q[++rear]=p->lchild ;
- if(p->rchild !=NULL) Q[++rear]=p->rchild ;
- }
- }
- //析构函数
- template <class T>
- void BiTree<T>::Release(BiNode<T> *bt)
- {
- if(bt==NULL)
- {
- Release(bt->lchild );
- Release(bt->rchild );
- delete bt;
- }
- }
- //建立二叉树
- template <class T>
- void BiTree<T>::Create(BiNode<T>* &bt)
- {
- T ch;
- cin>>ch;
- if(ch=='#')bt=NULL;
- else
- {
- bt=new BiNode<T>;
- bt->data =ch;
- cout<<"调用左孩子"<<endl;
- Create(bt->lchild );
- cout<<"调用右孩子"<<endl;
- Create(bt->rchild );
- }
- }
- //求树的深度
- template <class T>
- int BiTree<T>::Depth(BiNode<T>* bt)
- {
- if (NULL == bt)
- {
- return 0;
- }
- int d1 = Depth(bt->lchild);
- int d2 = Depth(bt->rchild);
- return (d1 > d2 ? d1 : d2)+ 1;
- }
- void main()
- {
- BiTree<char> a;
- //a.LeverOrder ();
- a.InOrder();
- cout << endl << a.Depth() << endl;
- }