二叉树

来源:互联网 发布:平板可以开淘宝店吗 编辑:程序博客网 时间:2024/05/21 10:42
      感觉二叉树这个章节是比较有难度的,打算看完树的这一章后,就开始对之前学习的数据结构做一些总结,巩固一下基础。关于二叉树目前就只看了一点点,觉得递归的知识在这一章中用的特别多,至于递归是怎么实现的,脑子里也是一片朦胧,就只知道是调自己那么一回事,要说出个所以然来,还是不知道怎么去描述这一过程。感觉还是要慢慢来,看一点写一点。
#include <iostream>using namespace std;typedef int Elem_Type;typedef enum{    OK    = 0,//正常    ERROR = -1,//逻辑异常    OVER  = -2//内存异常}Status;typedef struct BiTNode{    Elem_Type data;//数据域    struct BiTNode *Lchild;//左孩子    struct BiTNode *Rchild;//右孩子    BiTNode();//构造函数,用于生成结点时自动初始化}BiTNode;BiTNode::BiTNode(){    data   = 0;    Lchild = NULL;    Rchild = NULL;}Status PreOrderTraverse(BiTNode *root)//先序遍历{    if(!root)      return ERROR;    cout<<root->data<<" ";    PreOrderTraverse(root->Lchild);//递归遍历左子树    PreOrderTraverse(root->Rchild);//递归遍历右子树    cout<<endl;    return OK;}Status InOrderTraverse(BiTNode *root)//中序遍历{    if(!root)      return ERROR;    InOrderTraverse(root->Lchild);//递归遍历左子树    cout<<root->data<<" ";    InOrderTraverse(root->Rchild);//递归遍历右子树    cout<<endl;    return OK;}Status PostOrderTraverse(BiTNode *root)//后序遍历{    if(!root)      return ERROR;    PostOrderTraverse(root->Lchild);//递归遍历左子树    PostOrderTraverse(root->Rchild);//递归遍历右子树    cout<<root->data<<" ";    cout<<endl;    return OK;}int BiTreeDepth(BiTNode *root)//二叉树的深度{    if(!root)//如果结点为空返回0,否则递归遍历左右子树求最大值      return 0;    return (BiTreeDepth(root->Lchild) > BiTreeDepth(root->Lchild) ?             BiTreeDepth(root->Lchild) : BiTreeDepth(root->Lchild))+1;}int NodeNum(BiTNode *root)//二叉树节点的总数{    if(!root)//如果结点为空返回0,否则递归遍历左右子树求和      return 0;    return 1 + NodeNum(root->Lchild) + NodeNum(root->Rchild);}Status CreateBiTree(BiTNode *root)//先序构造二叉树{    Elem_Type temp;    cin>>temp;    if(temp == -1)      root = NULL;    else    {        root->data = temp;        CreateBiTree(root->Lchild);        CreateBiTree(root->Rchild);    }    return OK;}int main(void){    return 0;}
3 0
原创粉丝点击