二叉树与遍历算法完整代码c++
时间: 2023-12-13 10:50:49 浏览: 77
二叉树的遍历 C++
以下是二叉树的结构体定义和遍历算法的完整代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct treeNode {
int data;
struct treeNode* left;
struct treeNode* right;
} TreeNode;
// 创建新节点
TreeNode* createNode(int data) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
// 先序遍历
void preOrder(TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->data); // 先访问根节点
preOrder(root->left); // 再遍历左子树
preOrder(root->right); // 最后遍历右子树
}
// 中序遍历
void inOrder(TreeNode* root) {
if (root == NULL) {
return;
}
inOrder(root->left); // 先遍历左子树
printf("%d ", root->data); // 再访问根节点
inOrder(root->right); // 最后遍历右子树
}
// 后序遍历
void postOrder(TreeNode* root) {
if (root == NULL) {
return;
}
postOrder(root->left); // 先遍历左子树
postOrder(root->right); // 再遍历右子树
printf("%d ", root->data); // 最后访问根节点
}
int main() {
TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
root->right->left = createNode(6);
root->right->right = createNode(7);
printf("Preorder traversal: ");
preOrder(root);
printf("\n");
printf("Inorder traversal: ");
inOrder(root);
printf("\n");
printf("Postorder traversal: ");
postOrder(root);
printf("\n");
return 0;
}
```
以上代码中,首先定义了一个二叉树的结构体 `TreeNode`,其中包含一个整型数据 `data`,以及两个指向左右子节点的指针 `left` 和 `right`。
接着,定义了一个创建新节点的函数 `createNode`,用于根据传入的数据创建一个新的二叉树节点。
然后,分别实现了先序遍历、中序遍历和后序遍历三种遍历算法,分别使用递归的方式实现。
最后,在 `main` 函数中,创建了一个示例二叉树,并分别使用三种遍历算法输出其节点数据,以验证算法的正确性。
阅读全文