二叉树的三种遍历方式

编写程序封装创建二叉树,三种遍历方式遍历二叉树,销毁二叉树

#include <stdio.h>  
#include <stdlib.h>  
  
// 定义二叉树节点结构  
typedef struct TreeNode {  
    int val;  
    struct TreeNode *left;  
    struct TreeNode *right;  
} TreeNode;  
  
// 创建新节点  
TreeNode* createNode(int val) {  
    TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));  
    if (!newNode) {  
        printf("内存分配失败\n");  
        exit(1);  
    }  
    newNode->val = val;  
    newNode->left = NULL;  
    newNode->right = NULL;  
    return newNode;  
}  
  
// 前序遍历  
void preOrderTraversal(TreeNode* root) {  
    if (root == NULL) return;  
    printf("%d ", root->val);  
    preOrderTraversal(root->left);  
    preOrderTraversal(root->right);  
}  
  
// 中序遍历  
void inOrderTraversal(TreeNode* root) {  
    if (root == NULL) return;  
    inOrderTraversal(root->left);  
    printf("%d ", root->val);  
    inOrderTraversal(root->right);  
}  
  
// 后序遍历  
void postOrderTraversal(TreeNode* root) {  
    if (root == NULL) return;  
    postOrderTraversal(root->left);  
    postOrderTraversal(root->right);  
    printf("%d ", root->val);  
}  
  
// 销毁二叉树  
void destroyTree(TreeNode* root) {  
    if (root == NULL) return;  
    destroyTree(root->left);  
    destroyTree(root->right);  
    free(root);  
}  
  
// 示例:创建二叉树并遍历  
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("前序遍历: ");  
    preOrderTraversal(root);  
    printf("\n");  
  
    // 中序遍历  
    printf("中序遍历: ");  
    inOrderTraversal(root);  
    printf("\n");  
  
    // 后序遍历  
    printf("后序遍历: ");  
    postOrderTraversal(root);  
    printf("\n");  
  
    // 销毁二叉树  
    destroyTree(root);  
  
    return 0;  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值