利用二叉树先序和中序输出后序c代码
时间: 2023-10-28 15:02:55 浏览: 84
下面是利用二叉树先序和中序输出后序的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
char val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 根据先序遍历和中序遍历构建二叉树
TreeNode *buildTree(char *preorder, int preStart, int preEnd, char *inorder, int inStart, int inEnd) {
if (preStart > preEnd || inStart > inEnd) {
return NULL;
}
TreeNode *root = (TreeNode *)malloc(sizeof(TreeNode));
root->val = preorder[preStart];
int rootIndex = 0;
for (int i = inStart; i <= inEnd; i++) {
if (inorder[i] == root->val) {
rootIndex = i;
break;
}
}
int leftSize = rootIndex - inStart;
root->left = buildTree(preorder, preStart + 1, preStart + leftSize, inorder, inStart, rootIndex - 1);
root->right = buildTree(preorder, preStart + leftSize + 1, preEnd, inorder, rootIndex + 1, inEnd);
return root;
}
// 后序遍历输出
void postorderTraversal(TreeNode *root) {
if (root == NULL) {
return;
}
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%c ", root->val);
}
int main() {
char preorder[] = {'A', 'B', 'D', 'E', 'C', 'F', 'G'};
char inorder[] = {'D', 'B', 'E', 'A', 'F', 'C', 'G'};
TreeNode *root = buildTree(preorder, 0, sizeof(preorder) / sizeof(preorder[0]) - 1, inorder, 0, sizeof(inorder) / sizeof(inorder[0]) - 1);
printf("后序遍历结果为:");
postorderTraversal(root);
return 0;
}
```
这段代码中,我们先定义了二叉树的节点结构 `TreeNode`,包含节点值 `val`,左右子节点指针 `left` 和 `right`。
然后我们实现了 `buildTree` 函数,用于根据先序遍历和中序遍历构建二叉树。具体实现可以参考二叉树的构建算法。
最后,我们实现了 `postorderTraversal` 函数,用于输出二叉树的后序遍历结果。具体实现可以参考二叉树的后序遍历算法。
在 `main` 函数中,我们定义了先序遍历和中序遍历的序列,然后调用 `buildTree` 函数构建二叉树,最后调用 `postorderTraversal` 函数输出后序遍历结果。
阅读全文