二叉树前序遍历后续遍历,二叉树转换为树的算法c语言
时间: 2024-09-13 21:01:39 浏览: 19
二叉树的前序遍历是指先访问根节点,然后递归地遍历左子树和右子树。其遍历顺序为:根 -> 左 -> 右。相应的,后续遍历则是先访问左子树,再访问右子树,最后访问根节点,即:左 -> 左 -> 根 -> 右 -> 右。
将二叉树转换为链表(也称为二叉树的中序遍历),通常采用迭代的方式来实现,因为二叉树的中序遍历本身就是从左到根再到右的顺序,非常适合构建链表。以下是C语言的一个简单示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 中序遍历转化为链表
TreeNode* convertBSTToLL(TreeNode* root) {
if (root == NULL) return NULL;
TreeNode *prev = NULL, *current = root, *next = NULL;
while (current != NULL) {
next = current->left;
// 先处理左子树
while (next != NULL) {
prev = current;
current = next;
next = current->right;
}
// 将当前节点插入到链表中
prev->right = current;
current->left = NULL;
prev = current;
current = next;
}
return root;
}
void printInorderTraversal(TreeNode* node) {
if (node == NULL) return;
printInorderTraversal(node->left);
printf("%d ", node->val);
printInorderTraversal(node->right);
}
int main() {
// 创建一个简单的二叉树...
// ...
TreeNode *newRoot = convertBSTToLL(root);
printf("Converted binary tree in-order traversal:\n");
printInorderTraversal(newRoot); // 打印链表形式的中序遍历
return 0;
}
```