根据先序序列与中序序列构建二叉树

来源:互联网 发布:vb.net 多行注释 编辑:程序博客网 时间:2024/06/05 23:01

算法如下:
1)先在先序序列中找到根结点,
2)在中序序列中找到根结点位置,(可以将二叉树分为左子树和右子树)
3)用同样的办法构造左子树
4)用同样的办法构造右子树。

//根据先序序列与中序序列构建二叉树BinaryTree* Pre_In_Build(char* pre ,char* in, int size){    if(!pre || !in || size < 0){        cout<<"输入出错!"<<endl;        return NULL;    }    int root_index = 0;    //寻找根结点     for(root_index = 0 ; root_index < size ; root_index++){        if(in[root_index] == pre[0]){            break;        }else{            continue;        }    }    if(root_index == size){        cout<<"先序序列与中序序列不匹配!"<<endl;        return NULL;    }    //创建根结点     BinaryTree* root = this->Creat_Node(pre[0]);    //递归构建左子树     if(root_index > 0){        root->lchild = this->Pre_In_Build(pre+1,in,root_index);     }    //递归构建右子树     if(size - root_index - 1 > 0){        root->rchild = this->Pre_In_Build(pre+root_index+1,in+1+root_index,size-root_index-1);    }    return root;}void set(char ch){    this->data = ch;    this->lchild = this->rchild = NULL;}//创建根节点的函数 BinaryTree* Creat_Node(char ch){    BinaryTree* root;    root = new BinaryTree;    root->set(ch);    return root;}

对于二叉树的遍历算法可以详见我的另一篇博客:
http://blog.csdn.net/qq_30091945/article/details/77531651

阅读全文
1 0