当前位置: 首页 > article >正文

10 先序遍历创建二叉树

 这个代码是使用手动输入的方式创建二叉树 比较直观

#include "stdio.h"
#include "stdlib.h"

typedef int ElemType;
typedef struct node {
    ElemType data;
    struct node *lchild;
    struct node *rchild;
} Node;

Node *create_node(int value) {
    Node *node = (Node *) malloc(sizeof(Node));
    if (node == NULL) {
        exit(-1);
    }

    node->data = value;
    node->lchild = NULL;
    node->rchild = NULL;
    return node;
}

Node *create_tree() {
    int val = 0;
    printf("请输入创建树的数据 0为NULL");
    scanf("%d", &val);
    if (val == 0) {
        return NULL;
    }

    Node *node = create_node(val);
    printf("请输入%d的左子节点:", val);
    node->lchild = create_tree();
    printf("请输入%d的右子节点:", val);
    node->rchild = create_tree();
    return node;
}

// 先序遍历 根左右
void preOrder(Node *node) {
    if (node == NULL) {
        return;
    }
    printf("%d ", node->data);
    preOrder(node->lchild);
    preOrder(node->rchild);
}

void inOrder(Node *node) {
    if (node == NULL) {
        return;
    }

    inOrder(node->lchild);
    printf("%d ", node->data);
    inOrder(node->rchild);
}

void postOrder(Node *node) {
    if (node == NULL) {
        return;
    }

    postOrder(node->lchild);
    postOrder(node->rchild);
    printf("%d ", node->data);
}

//计算高度
int getHeight(Node *node) {
    if (node == NULL) {
        return 0;
    }

    int leftHeight = getHeight(node->lchild);
    int rightHeight = getHeight(node->rchild);
    return (leftHeight > rightHeight ? leftHeight : rightHeight) + 1;
}

int main() {
    Node *root = create_tree();
    preOrder(root);
    printf("\n");
    inOrder(root);
    printf("\n");
    postOrder(root);
    printf("\n");
    printf("高度为%d", getHeight(root));
    return 0;
}

运行效果


http://www.kler.cn/a/292059.html

相关文章:

  • C:原反补码
  • 【linux学习指南】VSCode部署Ubantu云服务器,与Xshell进行本地通信文件编写
  • C++ | Leetcode C++题解之第560题和为K的子数组
  • c++入门--引用与指针,const与引用,NULL与nullptr
  • Selective attention improves transformer详细解读
  • postgresql.conf与postgresql.auto.conf区别
  • PHP一站式解决方案高级房产系统小程序源码
  • WebSocket的详细介绍(打开你对WebSocket的认识)
  • 【openwrt-21.02】T750 openwrt MT7916 WPS PBC功能实现
  • 关于cookie和session的直观讲解(二)
  • 基于 Konva 实现Web PPT 编辑器(二)
  • 二维高斯函数的两种形式
  • iOS——weak修饰符的学习补充
  • flutter和android原生 界面显示的原理是什么,有什么异同。
  • 利用Python脚本批量管理Linux服务器部署服务
  • html+css网页设计 合十文化2个页面
  • c++ 定义函数
  • 为什么要有mybatis?——mybatis
  • Gitlab删除本地标签和分支
  • 使用 RabbitMQ 和 Go 构建异步订单处理系统
  • Apple “Glowtime”活动:iPhone 16、Apple Intelligence亮相
  • SQL进阶技巧:给定数字的频率查询中位数 | 中位值计算问题
  • vscode 20 个实用插件
  • 计算机毕业设计选题推荐-高校实验室教学管理系统-Java/Python项目实战
  • c语言中的动态内存管理
  • 面向可信和节能的雾计算医疗决策支持系统的优化微型机器学习与可解释人工智能