LeetCode:889. 根据前序和后序遍历构造二叉树

class Solution {

public:

unordered_map<int,int>valToIndex;

TreeNode* constructFromPrePost(vector<int>& preorder, vector<int>& postorder) {

for(int i=0;i<postorder.size();i++){

valToIndex[postorder[i]]=i;

}

return build(preorder,0,preorder.size()-1,

postorder,0,postorder.size()-1);

}

TreeNode* build(vector<int>& preorder,int preStart,int preEnd,

vector<int>& postorder,int postStart,int postEnd){

if(preStart>preEnd){

return nullptr;

}

if(preStart==preEnd){

return new TreeNode(preorder[preStart]);

}

int rootVal=preorder[preStart];

int leftRootVal=preorder[preStart+1];

int index=valToIndex[leftRootVal];

int leftsize=index-postStart+1;

//先构造出当前根节点

TreeNode* root=new TreeNode(rootVal);

root->left=build(preorder,preStart+1,preStart+leftsize,

postorder,postStart,index);

root->right=build(preorder,preStart+leftsize+1,preEnd,

postorder,index+1,postEnd-1);

return root;

}

};

相关推荐
我在人间贩卖青春2 分钟前
C++之this指针
c++·this
爱敲代码的TOM5 分钟前
数据结构总结
数据结构
云姜.5 分钟前
java多态
java·开发语言·c++
CoderCodingNo14 分钟前
【GESP】C++五级练习题 luogu-P1865 A % B Problem
开发语言·c++·算法
陳103021 分钟前
C++:红黑树
开发语言·c++
大闲在人25 分钟前
7. 供应链与制造过程术语:“周期时间”
算法·供应链管理·智能制造·工业工程
一切尽在,你来26 分钟前
C++ 零基础教程 - 第 6 讲 常用运算符教程
开发语言·c++
小熳芋28 分钟前
443. 压缩字符串-python-双指针
算法
Charlie_lll37 分钟前
力扣解题-移动零
后端·算法·leetcode
chaser&upper38 分钟前
矩阵革命:在 AtomGit 解码 CANN ops-nn 如何构建 AIGC 的“线性基石”
程序人生·算法