创建二叉树,
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
TreeNode* createNode(int data) {
TreeNode *newNode = (TreeNode*)malloc(sizeof(TreeNode));
if (newNode == NULL) {
return NULL;
}
newNode->data = data;
newNode->left = newNode->right = NULL;
return newNode;
}
void insertNode(TreeNode **root, int data) {
if (*root == NULL) {
*root = createNode(data);
} else if (data < (*root)->data) {
insertNode(&((*root)->left), data);
} else {
insertNode(&((*root)->right), data);
}
}
三种遍历方式遍历二叉树,
前序遍历
void preorderTraversal(TreeNode *root) {
if (root != NULL) {
printf("%d ", root->data);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
}
中序遍历
void inorderTraversal(TreeNode *root) {
if (root != NULL) {
inorderTraversal(root->left);
printf("%d ", root->data);
inorderTraversal(root->right);
}
}
后序遍历
void postorderTraversal(TreeNode *root) {
if (root != NULL) {
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%d ", root->data);
}
}
销毁二叉树
void destroyTree(TreeNode **root) {
if (*root != NULL) {
destroyTree(&((*root)->left));
destroyTree(&((*root)->right));
free(*root);
*root = NULL;
}
}