链式二叉树的部分基础知识点

简介: 链式二叉树的部分基础知识点

1.二叉树的基本结构及其创建。

#include"stdio.h"
#include"stdlib.h"
typedef char  BTDataType;
typedef struct BinaryTreeNode{
    struct BinaryTreeNode*left;
    struct BinaryTreeNode*right;
    BTDataType data;
}BTNode;
BTNode *BuyNode(BTDataType x){
    BTNode*node=(BTNode*)malloc(sizeof(BTNode));
    if(node==NULL){
        printf("fail");
        exit(-1);
    }
    node->data=x;
    node->left=node->right=NULL;
    return node;
}
BTNode*CreatBinaryTree(){
    BTNode*nodeA=BuyNode('A');
    BTNode*nodeB=BuyNode('B');
    BTNode*nodeC=BuyNode('C');
    BTNode*nodeD=BuyNode('D');
    BTNode*nodeE=BuyNode('E');
    BTNode*nodeF=BuyNode('F');
    nodeA->left=nodeB;
    nodeA->right=nodeC;
    nodeB->left=nodeD;
    nodeC->left=nodeE;
    nodeC->right=nodeF;
    return nodeA;
}

2.堆的遍历

                    所有的遍历有着递归,也就是有着把一个大问题换成很多个小问题

                    (1)前序遍历(根->左子树->右子树)

                             先是由根到左子树到右子树 所以先是看A,A不是空后打印A,其实也就相当于打印根,然后左子树,左子树的根B,然后B的左子树根D左树为空,后右树为空,然后是返回B,B的右子树为空,然后返回A进去A的右子树,进入C的根,然后C进入左子树E,E的左右节点为空,然后进入右子树F最后两个空

打印出来后就是ABD NULL NULL C E NULL NULL F NULL NULL

//二叉树前序遍历
void PreOrder(BTNode*root){
    if(root==NULL){
        printf("NULL");
        return;
    }
    printf("%c",root->data);
    PreOrder(root->left);                        //递归A的左,也就是B再递归B的左,B的左是D也就是说目前是ABD再是NULL空后回到D,再走D的右
    PreOrder(root->right);
}

                  (2)中序遍历(左子树->根->右子树)

                                          先是由左子树到根到右子树,进去的是A进A左子树B,进B左子树D,D的左子树是返回NULL然后是返回D,进D的右子树返回NULL,回到B,也返回B,进B右树为NULL,进A 返回A,然后给C的左子树E然后返回左NULL,然后返回C,后再返 NULL,再到F的左子树NULL,再到F最后还是NULL

//二叉树中序遍历
void InOrder(BTNode*root){
    if(root==NULL){
        printf("NULL");
        return;
}
InOrder(root->left);
    printf("%c",root->data);
   InOrder(root->right);}

               (3)后序遍历(左子树->右子树->根)

          老套路,先进A的左子树B,再进B的左子树D,返回左右俩个为NULL,然后返回D,再返回B的右子树NULL,再返回B,然后进入右子树C,再去到E,E的左右是空,返回两个空,再到C的右节点F,返回两个NULL,再返回F,然后返回C,返回A

//二叉树后序遍历
void PostOrder(BTNode*root){
       if(root==NULL){
        printf("NULL");
    return;
}
    PostOrder(root->left);
    PostOrder(root->right);
printf("%c",root->data);
}

 


相关文章
|
监控 网络协议 物联网
你知道什么是物联网MQTT么?
你知道什么是物联网MQTT么?
1366 0
【C语言】大小写字母的相互转化:多种方法解析及原理说明
【C语言】大小写字母的相互转化:多种方法解析及原理说明
|
IDE Shell 网络安全
使用ESC服务器配置code-server
使用ESC服务器来配置code-server服务(在线VSCode编辑器)
2149 1
使用ESC服务器配置code-server
|
8月前
|
人工智能 搜索推荐 算法
警惕AI时代的陷阱:Geo优化中容易踩的坑与人性化Geo的破局之道
随着生成式AI兴起,Geo优化成企业获客新战场。专家于磊指出,黑帽手段、忽视E-E-A-T、关键词堆砌是三大常见陷阱。他倡导“人性化Geo”理念,强调内容真实性、专业性与语义设计,助力企业实现可持续增长。
759 158
|
9月前
|
存储 JSON API
搜索商品ID获取商品详情接口
本文介绍如何基于RESTful API设计商品详情查询接口,使用Python+Flask实现。涵盖接口设计、错误处理、性能优化与安全措施,支持通过商品ID快速获取名称、价格、库存等信息,适用于电商与库存系统,兼顾高效性与可扩展性。(238字)
|
11月前
|
运维 安全 BI
企业如何快速搭建一套低代码开发平台?
低代码开发通过可视化配置快速构建应用,助力企业实现业务流程数字化。本文详解其核心优势,结合简道云平台,以进销存系统为例,手把手提供从数据初始化、流程搭建到上线运维的落地实践方案。
|
网络协议 安全 网络安全
流量劫持常见的攻击场景
流量劫持常见的攻击场景
1418 1
|
存储 人工智能 BI
【头歌·计组·自己动手画CPU】二、运算器设计(理论版) 【计算机硬件系统设计】
【头歌·计组·自己动手画CPU】二、运算器设计(理论版) 【计算机硬件系统设计】
2606 1
|
安全 UED 黑灰产治理
微信留言自动回复(Python实现)
本项目旨在使用Python与Windows GUI自动化工具来自动化微信的操作,作用为读取未读消息、根据关键词回复消息
1570 0