106. 从中序与后序遍历序列构造二叉树
✅做题思路or感想:
-
这道题要从前中后序遍历的特点入手。因为后序遍历的最后一个节点必是根节点,故从次开始
- 如果数组长度为0,则说明是空节点
- 如果数组不为空,那么后序数组的最后一个元素作为节点元素
- 找到后序数组的最后一个元素在中序数组中的位置,作为切割位置
- 利用切割位置把中,后序数组切成左子树的中,后序数组和右子树的中,后序数组
- 递归左子树和右子树
-
class Solution { public: TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { if (postorder.size() == 0)return nullptr; int val = postorder[postorder.size() - 1]; TreeNode* root = new TreeNode(val); //造节点 if (postorder.size() == 1)return root; int index; //找切割点 for (int i = 0; i < inorder.size(); i++) { if (inorder[i] == val) { index = i; break; } } //左子树的中序,后序遍历的数组 vector<int> inleft = vector<int>(inorder.begin(), inorder.begin() + index); vector<int> postleft = vector<int>(postorder.begin(), postorder.begin() + index); //右子树的中序,后序遍历的数组 vector<int> inright = vector<int>(inorder.begin() + index + 1, inorder.end()); vector<int> postright = vector<int>(postorder.begin() + index, postorder.end() - 1); root->left = buildTree(inleft, postleft); root->right = buildTree(inright, postright); return root; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端