一步一步建立一个二叉树

来源:互联网 发布:东芝复印机网络店 编辑:程序博客网 时间:2024/06/10 12:42

December 10, 2015 10:54 AM

第一步:创建一个二叉树结点类

class BiTNode                                   //树结点类{    public:        char data;        class BiTNode *lchild, *rchild;};typedef BiTNode* BiTree;                        //定义一个二叉树结点

第二步:建立一棵二叉树

void CreateBiTree(BiTree *T)        //创建一棵二叉树,约定用户遵照前序遍历输入数据{    char c;    while(!(c = cin.get()))         //判断输入是否有误,如果有误清理缓冲重新输入    {        cin.clear();                //清除出错状态        cin.ignore();               //将缓冲区里边现有的数据全部丢弃        cout << "Input error!!!"<<endl;    }    if(c == ' ')                    //如果输入数据为空格,代表没有相应结点    {        *T = NULL;    }    else                            //递归生成二叉树    {        *T = new(BiTNode);        (*T)->data = c;        CreateBiTree(&(*T)->lchild);        CreateBiTree(&(*T)->rchild);    }}

第三步:二叉树遍历

void vistit(char data, int level)               ////访问二叉树结点{    cout << data << "位于第" << level << "层" <<endl;}void PreTravers(BiTree T, int level)            //前序遍历二叉树{    if(T)    {        vistit(T->data, level);                 //先访问根结点。然后左子树、右子树        PreTravers(T->lchild, level+1);         //更改此处三句话的顺序便得到不同的遍历结果        PreTravers(T->rchild, level+1);    }}

第四步:主函数运行测试

int main(int argc, char** argv) {    BiTree T = NULL;                            //先定义一个空树    int level = 1;                              //从第一层开始创建    CreateBiTree(&T);                           //创建二叉树    PreTravers(T, level);                       //二叉树遍历    return 0;}

输入数据时注意:
1.本程序的输入时按照前序遍历的方式存储数据;
2.在数据读入时,遇到叶子结点,叶子结点的左右子树用空格代替,因为只有前序遍历是无法确定一棵二叉树的。

例如,对于下图所示二叉树,应输入:(ABC DE G F ),C、D之间是两个空格,E、G之间是一个空格,G和F之后是两个空格。
这里写图片描述

2 0