前序和中序序列重建二叉树

来源:互联网 发布:泰豪软件股份有限公司 编辑:程序博客网 时间:2024/05/17 15:40

思路

根据前序和中序的特性,前序序列的一个元素就是树的根元素,那么在中序序列找到相应的元素。找到后该元素前面所有元素都是左子树元素,后面元素都是右子树元素。那么此时跟节点的pleft就是左子树返回的结果,pright就是右子树返回的结果,使之递归即可,递归出口就是前序区间只有一个元素时。
这里写图片描述

Node* _rebuilt_In_pre_order(int *prestart, int*preEnd, int*Instart, int*InEnd){    int *left_end = Instart;    Node*Root = new Node(prestart[0]);    if (prestart == preEnd)    {        if(Instart==InEnd&&prestart[0] == Instart[0])             return Root;       else {        cerr << "输入有误" << endl;        exit(1);      }    }    while (left_end <= InEnd&&prestart[0] != *left_end)    {        left_end++;    }    if (left_end > InEnd){        cerr << "输入有误" << endl;        exit(2);    }    int left_length = left_end - Instart;    int *left_pre_end = prestart + left_length;    if (left_length>0)    {        Root->_PLeft = _rebuilt_In_pre_order(prestart+1, left_pre_end, Instart, left_end - 1);//将左子树区间输入该函数,返回一个左子树的节点出来赋值给根的左    }    if (left_end < InEnd)    {        Root->_PRight = _rebuilt_In_pre_order(prestart + 1 + left_length, preEnd, left_end + 1, InEnd);    }    return Root;}Node *rebuilt_In_pre_order(int * pre, int * In, int length){    if (pre == NULL || In == NULL || length <= 0)        return NULL;    return _rebuilt_In_pre_order(pre, pre + length - 1, In, In + length - 1);}
阅读全文
0 0
原创粉丝点击