苏嵌实训——day11(下)

简介: 苏嵌实训——day11(下)

2.3二叉树的存储方式


2.3.1 二叉树的顺序存储


因为无法保存当前二叉树是一个满二叉树或者完全二叉树,所以,顺序存储时,需要将不存在的结点预留位置,这样做就会浪费空间,所以一般不使用顺序存储

0a2653c851af460fa595bd959398a8f1.png


2.3.2 二叉树的链式存储


二叉树使用链式存储时,每一个结点需要定义一个结构体,里面至少有三个成员,分别是一个数据域和两个指针域组成,数据域保存数据,指针域分别保存左右子树的地址。

0a2653c851af460fa595bd959398a8f1.png

typedef int DataType;
typedef struct node   //定义二叉树的结点结构体
{
  DataType data;
  struct node *left;    //指向左孩子的指针
  struct node *right;    //指向右孩子的指针
}bitree_t;


2.4 二叉树的遍历


2.4.1 二叉树的遍历:


先序遍历:先访问树根,再访问左子树,最后访问右子树 (根左右)

中序遍历:先访问左子树,再访问树根,最后访问右子树(左根右)

后序遍历:先访问左子树,再访问右子树,最后访问树根(左右根)

0a2653c851af460fa595bd959398a8f1.png

反推:中序必须有,先序或者后序有一个就可以

0a2653c851af460fa595bd959398a8f1.png2d65d23f6d4748949b924e4057485923.png


2.4.2 代码


#ifndef _TREE_H_
#define _TREE_H_
#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
typedef struct node   //定义二叉树的结点结构体
{
  DataType data;
  struct node *left;    //指向左孩子的指针
  struct node *right;    //指向右孩子的指针
}bitree_t;
//创建一棵二叉树
bitree_t *CreateTree(DataType *a,int length);
//先序遍历
void PreOrder(bitree_t *root);
//中序遍历
void MidOrder(bitree_t *root);
//后序遍历
void PostOrder(bitree_t *root);
#endif


#include "tree.h"
//创建一棵二叉树
bitree_t *CreateTree(DataType *a,int length)
{
    bitree_t *array[11] ={0};
    int i;
    for(i = 0; i < length;i++)
    {
        array[i] = (bitree_t *)malloc(sizeof(bitree_t));
        if(NULL == array[i])
        {
            return NULL;
        }
        array[i]->data = a[i];
        array[i]->left = NULL;
        array[i]->right = NULL;
    }
    for(i = 0 ; i < length /2;i++)
    {
        array[i]->left = array[2*i + 1];
        array[i]->right = array[2*i + 2];
    }
    return array[0];
}
//先序遍历
void PreOrder(bitree_t *root)
{
    if(NULL == root)
    {
        return;
    }
    printf("%d ",root->data);
    PreOrder(root->left);
    PreOrder(root->right);
}
//中序遍历
void MidOrder(bitree_t *root)
{
    if(NULL == root)
    {
        return;
    }
    MidOrder(root->left);
    printf("%d ",root->data);
    MidOrder(root->right);
}
//后序遍历
void PostOrder(bitree_t *root)
{
    if(NULL == root)
    {
        return;
    }
    PostOrder(root->left);
    PostOrder(root->right);
    printf("%d ",root->data);
}


#include "tree.h"
int main(int argc, char const *argv[])
{
    DataType array[10] ={1,2,3,4,5,6,7,8,9,10};
    bitree_t *root1 = CreateTree(array,sizeof(array)/sizeof(array[0]));
    PreOrder(root1);
    putchar(10);
    MidOrder(root1);
    putchar(10);
    PostOrder(root1);
    putchar(10);
    return 0;
}


2.5 二叉搜索树


定义:二叉查找树,又被称为二叉搜索树,其特点,左孩子比父节点小,右孩子比父节点大。


//二叉搜索树
bitree_t* CreateBSTree(bitree_t *root,DataType num)
{
    if(NULL == root)
    {
        root = (bitree_t *)malloc(sizeof(bitree_t) * 1);
        if(NULL == root)
        {
            return NULL;
        }
        root->data = num;
        root->left = NULL;
        root->right = NULL;
    }
    else
    {
        if(root->data > num)
        {
            root->left = CreateBSTree(root->left,num);
        }
        else
        {
            root->right = CreateBSTree(root->right,num);
        }
    }
    return root;
}


相关文章
|
机器学习/深度学习 算法 测试技术
处理不平衡数据的过采样技术对比总结
在不平衡数据上训练的分类算法往往导致预测质量差。模型严重偏向多数类,忽略了对许多用例至关重要的少数例子。这使得模型对于涉及罕见但高优先级事件的现实问题来说不切实际。
511 0
|
设计模式 安全 C++
【C++ const 函数 的使用】C++ 中 const 成员函数与线程安全性:原理、案例与最佳实践
【C++ const 函数 的使用】C++ 中 const 成员函数与线程安全性:原理、案例与最佳实践
459 2
|
消息中间件 数据可视化 Java
SpringBoot3集成Kafka
SpringBoot3集成KafkaKafka是一个开源的分布式事件流平台,常被用于高性能数据管道、流分析、数据集成和关键任务应用,基于Zookeeper协调的处理平台,也是一种消息系统,具有更好的吞吐量、内置分区、复制和容错。
1068 0
|
人工智能 前端开发 JavaScript
小说网站|基于Springboot+Vue实现在线小说阅读网站(三)
小说网站|基于Springboot+Vue实现在线小说阅读网站
308 0
|
安全 Unix 网络安全
Permission Denied原因及解决方法
Permission Denied原因及解决方法
4613 0
|
算法 C# 数据安全/隐私保护
C# | AES加解密 - 快速上手
这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一 。 AES作为计算机领域最常见的通用加密算法之一,称之为对称加密算法中的一哥也丝毫不为过,其重要程度不言而喻。 本文将极尽详细的讲解C#实现AES加密和解密的全过程。
889 0
C# | AES加解密 - 快速上手
|
Python
【闪击Python】字符串的创建和驻留机制
【闪击Python】字符串的创建和驻留机制
190 0
|
程序员 编译器 Python
计算机科学中的函数
计算机科学中的函数
468 1
【LeetCode每日一题】找(一只或者多只)单身狗
【LeetCode每日一题】找(一只或者多只)单身狗
189 1
【LeetCode每日一题】找(一只或者多只)单身狗