算法思路:
前序:根左右
中序:左根右
根据前序和中序的特点可以得知,在前序遍历中寻找根节点,在中序遍历中将左右子树分开。依次递归下去就可以构造一个二叉树
以其中一次为例:
若前序中的根节点位置在中序的长度为len那么递归如下
node->left = buildTreeCore(preorder, pre_start + 1, pre_start + len, inorder, in_start, in_start + len - 1);
node->right = buildTreeCore(preorder, pre_start + len+1, pre_end, inorder, in_start+ len+1, in_end);
注意处理两种特殊情况:
1.start==end
TreeNode* node = new TreeNode(preorder[pre_start]);
node->left = NULL;
node->right = NULL;
if (pre_start == pre_end)
return node;
2.start>end
if (pre_start > pre_end)
return NULL;
leetcode通过代码:
TreeNode* buildT