重构二叉树

来源:互联网 发布:氰化钠 淘宝 编辑:程序博客网 时间:2024/06/05 07:57

重构二叉树算法流程

这里写图片描述

表格分析

这里写图片描述

算法代码

struct TreeNode {    int val;    TreeNode *left;    TreeNode *right;    TreeNode(int x) : val(x), left(NULL), right(NULL) {}};struct TreeNode* ReconstruBTree(vector<int> preTree, vector<int> midTree){    if (preTree.size() == 0 || midTree.size() == 0){        return nullptr;    }    int leftcnt =0,rightcnt= 0,rootIndex=0;    int rootValue = preTree[0];    int treecnt = preTree.size();    bool bFindRoot = false;    for (int i = 0; i < midTree.size();i++)    {               if (rootValue == midTree[i])        {                       bFindRoot = true;            rootIndex = i;            break;        }        leftcnt++;    }       if (!bFindRoot){ return nullptr;}    rightcnt = treecnt - leftcnt - 1;    vector<int>preleftTree;    vector<int>prerightTree;    vector<int>midleftTree;    vector<int>midrightTree;    for (int i = 0; i < midTree.size(); i++)    {        if (i<rootIndex)        {            midleftTree.push_back(midTree[i]);        }        else if (i>rootIndex){            midrightTree.push_back(midTree[i]);        }    }    for (int i = 0; i < preTree.size(); i++)    {        if (i>0 && i <= leftcnt)        {            preleftTree.push_back(preTree[i]);        }        else if (i > leftcnt)        {            prerightTree.push_back(preTree[i]);        }    }    TreeNode* rootTree = new TreeNode(rootValue);    TreeNode* lNode = ReconstruBTree(preleftTree, midleftTree);    TreeNode* rNode = ReconstruBTree(prerightTree, midrightTree);    rootTree->left = lNode;     rootTree->right = rNode;    return rootTree;    }