利用前序和中序遍历构建二叉树的递归算法
时间: 2023-11-21 10:04:35 浏览: 75
中序遍历二叉树的递归算法
可以利用递归算法来构建二叉树,具体步骤如下:
1. 首先,以前序遍历序列的第一个元素作为根节点,将中序遍历序列分成左子树和右子树两部分。
2. 然后,递归处理左子树和右子树,构建出左子树和右子树的二叉树。
3. 最后,将根节点与左子树和右子树的根节点连接起来,构建出整个二叉树。
具体的递归算法如下:
```
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
if(preorder.empty() || inorder.empty()) return nullptr;
TreeNode* root = new TreeNode(preorder[0]);
int pos = find(inorder.begin(), inorder.end(), preorder[0]) - inorder.begin();
vector<int> left_inorder(inorder.begin(), inorder.begin() + pos);
vector<int> right_inorder(inorder.begin() + pos + 1, inorder.end());
vector<int> left_preorder(preorder.begin() + 1, preorder.begin() + pos + 1);
vector<int> right_preorder(preorder.begin() + pos + 1, preorder.end());
root->left = buildTree(left_preorder, left_inorder);
root->right = buildTree(right_preorder, right_inorder);
return root;
}
```
其中,preorder表示前序遍历序列,inorder表示中序遍历序列,返回值是构建出的二叉树的根节点。注意,这里使用了vector来存储遍历序列,find函数可以在vector中查找元素的位置。
阅读全文