数据结构 递归

来源:互联网 发布:网络水军怎么找 编辑:程序博客网 时间:2024/06/05 17:00

BiTree.h

#ifndef BiTree_H#define BiTree_H//避免重复包含BiTree的头文件//定义二叉链表的节点struct BiNode{char data;//假设二叉树的结构类型为char型BiNode *lchild,*rchild; } ;class BiTree{public:BiTree(){root=Creat(root);}~BiTree(){Release(root);//释放节点的储存空间 } void PreOrder(){PreOrder(root);//前序遍历二叉树 } void  InOrder(){InOrder(root);
BiTree.cpp

#include<iostream>using namespace std;#include"Bitree.h"//以下是BiTree的成员函数定义BiNode *BiTree::Creat(BiNode *bt){char ch;cout<<"请输入创建一棵二叉树的节点数据"<<endl ;cin>>ch;if(ch=='#')return NULL;else{bt=new BiNode;//输入的字符赋给下一个节点bt->data=ch;//生成一个节点数据域为chbt->lchild=Creat(bt->lchild);//递归建立左子树bt->rchild=Creat (bt->rchild);//递归建立右子树 } return bt; } void BiTree::Release(BiNode *bt){if(bt!=NULL){Release(bt->lchild);Release(bt->rchild);delete bt;}}void BiTree::PreOrder(BiNode *bt){if(bt==NULL)//如果头结点为空 则返回 return;else{cout<<bt->data<<" ";//否则访问根节点的数据域PreOrder(bt->lchild);//前序遍历根节点的左子树 PreOrder(bt->rchild); //前序遍历根节点的右子树 } }void BiTree:: InOrder(BiNode *bt){if(bt==NULL)return;else{InOrder(bt->lchild);cout<<bt->data<<" ";InOrder(bt->rchild);}}void BiTree::PostOrder(BiNode *bt){if(bt==NULL)return;else{PostOrder(bt->lchild); PostOrder(bt->rchild);cout<<bt->data<<" ";}}

} void PostOrder(){PostOrder(root);//后续遍历二叉树 }private: BiNode *root;//指向根节点的头指针 BiNode *Creat(BiNode *bt); //调用构造函数void Release(BiNode *bt) ;//西沟函数的调用void PreOrder(BiNode *bt);void InOrder(BiNode *bt);void PostOrder(BiNode *bt); } ;#endif


Bitree_main.cpp
#include<iostream>using namespace std;#include"Bitree.h"int main(){BiTree T;//创建一棵二叉树cout<<"---------前序遍历-----------"<<endl;T.PreOrder();cout<<endl;cout<<"---------中序遍历-----------"<<endl;T.InOrder();cout<<endl;cout<<"---------后序遍历-----------"<<endl;T.PostOrder();cout<<endl;return 0; }