建立一棵二叉树的二叉链表
时间: 2023-07-11 22:50:26 浏览: 93
好的,我可以回答您的问题。建立一棵二叉树的二叉链表,可以通过定义一个节点结构体来表示二叉树的节点,其中包含指向左子树和右子树的指针。具体代码如下所示:
```
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
```
然后,我们可以通过递归的方式来构建二叉树的二叉链表,具体实现如下:
```
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
if (preorder.empty() || inorder.empty()) {
return nullptr;
}
int root_val = preorder[0];
TreeNode* root = new TreeNode(root_val);
int i = 0;
for (; i < inorder.size(); i++) {
if (inorder[i] == root_val) {
break;
}
}
vector<int> left_preorder(preorder.begin() + 1, preorder.begin() + i + 1);
vector<int> left_inorder(inorder.begin(), inorder.begin() + i);
vector<int> right_preorder(preorder.begin() + i + 1, preorder.end());
vector<int> right_inorder(inorder.begin() + i + 1, inorder.end());
root->left = buildTree(left_preorder, left_inorder);
root->right = buildTree(right_preorder, right_inorder);
return root;
}
```
其中,preorder表示二叉树的前序遍历序列,inorder表示二叉树的中序遍历序列。在每次递归中,我们都可以通过前序遍历序列和中序遍历序列的关系来确定当前子树的根节点,并且将左子树和右子树分别作为子问题递归求解。最终,我们可以得到一棵二叉树的二叉链表。
阅读全文