核心解题思路是将大问题分解为小问题,使用递归
遇到这类题思路:确定根 左孩子 右孩子的位置或区间,限定当区间左侧>右侧时返回nullptr
其中中序中的各结点的位置用哈希表存储,用于确定左右孩子区间(结合根节点的值查找后)
105 Construct Binary Tree from Preorder and Inorder Traversal【默写】
题解思路:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
TreeNode* buildTreeHelper(vector<int>& preorder,int preStart,int preEnd, vector<int>& inorder,int inStart ,int inEnd,unordered_map<int,int>& inMap){
if(preStart > preEnd || inStart > inEnd){
return nullptr;
}
//确定根节点的值
int rootVal = preorder[preStart];