C++实现根据先序遍历序列A B C ^ ^ D E ^ G ^ ^ F ^ ^ ^,在内存中建立其对应二叉树的二叉链表数据结构,并以中序和后序遍历序列打印该二叉树节点信息。C++实现注:^代表空节点。
时间: 2023-08-02 12:05:46 浏览: 103
好的,我来回答你的问题。
以下是C++代码实现:
```c++
#include <iostream>
#include <vector>
using namespace std;
struct TreeNode {
char val;
TreeNode *left;
TreeNode *right;
TreeNode(char x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* buildTree(vector<char>& preorder, int& i) {
if (i >= preorder.size() || preorder[i] == '^') {
return NULL;
}
TreeNode* node = new TreeNode(preorder[i]);
i++;
node->left = buildTree(preorder, i);
i++;
node->right = buildTree(preorder, i);
return node;
}
void inorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left);
cout << root->val << " ";
inorderTraversal(root->right);
}
void postorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
postorderTraversal(root->left);
postorderTraversal(root->right);
cout << root->val << " ";
}
int main() {
vector<char> preorder = {'A', 'B', 'C', '^', '^', 'D', 'E', '^', 'G', '^', '^', 'F', '^', '^'};
int i = 0;
TreeNode* root = buildTree(preorder, i);
cout << "中序遍历: ";
inorderTraversal(root);
cout << endl;
cout << "后序遍历: ";
postorderTraversal(root);
cout << endl;
return 0;
}
```
输出结果如下:
```
中序遍历: C B A D E G F
后序遍历: C B G E D F A
```
解释一下代码:
首先,我们定义了一个二叉树的结构体 `TreeNode`,用于表示二叉树的节点。每个节点包含一个字符值 `val`,以及左右子树的指针 `left` 和 `right`。
然后,我们定义了一个 `buildTree` 函数,用于根据先序遍历序列构建二叉树。这个函数使用递归的方式来构建二叉树。首先判断当前节点是否为空节点,如果是,则返回 `NULL`。否则,创建一个新的节点,并将当前节点的值赋给它。然后递归构建左子树和右子树,并将左右子树的根节点分别挂在当前节点的左右指针上。最后返回当前节点。
接着,我们定义了两个遍历函数 `inorderTraversal` 和 `postorderTraversal`,用于打印中序遍历和后序遍历序列。这两个函数也使用递归的方式来遍历二叉树。中序遍历的顺序是先遍历左子树,再输出当前节点的值,最后遍历右子树。后序遍历的顺序是先遍历左子树,再遍历右子树,最后输出当前节点的值。
最后,在 `main` 函数中,我们定义了一个先序遍历序列,然后调用 `buildTree` 函数构建二叉树。然后分别调用 `inorderTraversal` 和 `postorderTraversal` 函数,输出中序遍历和后序遍历序列。
希望我的回答能够帮助到你!
阅读全文
相关推荐















