LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal

Search in inorder vector to find the next root->right, root->left index which is being used to set the border for next recursion in preorder border.

// you may assume that there is no duplicates in the tree.
buildTree(vector<int>& preorder, vector<int>& inorder, TreeNode* root, int index, int nStart, int nEnd) {
  if(nStart >= nEnd) return;
  int num = preorder[index];
  root = new TreeNode(num);
  int r = start;
  while(r < nEnd && inorder[r] != num) {r++;}
  if(r < nEnd) buildTree(preorder, inorder, root->left, index + 1, nStart, r);
  if(nEnd > r + 1) buildTree(preorder, inorder, root->right, index + r + 1 - nStart, r + 1, nEnd);
}

TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
  TreeNode* root = NULL;
  int nSize = preorder.size();
  buildTree(preorder, inorder, root, 0, 0, nSize);
  return root;
}


你可能感兴趣的:(LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal)