用二叉链创建二叉树(顺序表等更?)

本文详细介绍了如何使用二叉链表来构建二叉树,并探讨了顺序表在构建二叉树过程中的应用,讨论了它们各自的优缺点,帮助读者理解不同的数据结构在实现二叉树时的角色。
摘要由CSDN通过智能技术生成
//链式存储结构
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
//声明结构体
typedef struct node
{
    char data;
    struct node *lchild;
    struct node *rchild;
}BTNode;

char apre[]="ABDGCEF",ai[]="DGBAECF",apost[]="GDBEFCA";
int len;

//用先序序列和中序序列创建二叉树
BTNode* CreatBT1(char *pre,char *in,int n)
{
    BTNode *b;
    char *p;
    int k;
    if(n<=0) return NULL;
    b=(BTNode*)malloc(sizeof(BTNode));
    b->data=*pre;
    for(p=in;p<in+n;p++)
        if(*p==*pre) break;
    k=p-in;       //k是记录的当前根节点的左右结点的个数
    b->lchild=CreatBT1(pre+1,in,k);
    b->rchild=CreatBT1(pre+k+1,p+1,n-k-1);
    return b;
}
//用中序序列和后续序列创建二叉树
//BTNode* CreatBT2(char *post,char *in,int n)
//{
//    BTNode *b;
//    char *p;
//    int k;
//    if(n<=0) return NULL;
//    
//}




//先序遍历
void PreOrder(BTNode* bt)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要了解二叉树顺序存储二叉链表存储的概念。 1. 顺序存储:将二叉树按照层次遍历的顺序依次存储在一维数组中,若节点在数组中的下标为i,则其左子节点在数组中的下标为2i,右子节点在数组中的下标为2i+1。 2. 存储:将二叉树的每个节点定义为一个结构体,包含左右子节点以及节点的值。 以下是C语言代码实现通过二叉树顺序存储输入,创建二叉树: ```c #include <stdio.h> #include <stdlib.h> // 二叉树节点结构体 typedef struct TreeNode { int val; struct TreeNode* left; struct TreeNode* right; } TreeNode; // 创建二叉树顺序存储) void createTree(int* arr, int len, TreeNode** root) { TreeNode** queue = (TreeNode**)calloc(len, sizeof(TreeNode*)); // 队列存储节点 TreeNode* node = NULL; for (int i = 0; i < len; i++) { if (arr[i] == -1) { // 空节点 node = NULL; } else { // 创建新节点 node = (TreeNode*)malloc(sizeof(TreeNode)); node->val = arr[i]; node->left = NULL; node->right = NULL; } queue[i] = node; // 将节点存入队列 if (i > 0) { // 非根节点 int parent = (i - 1) / 2; // 计算父节点下标 if (queue[parent] != NULL) { // 父节点非空 if (i % 2 == 1) { // 左子节点 queue[parent]->left = node; } else { // 右子节点 queue[parent]->right = node; } } } } *root = queue[0]; // 返回根节点 free(queue); // 释放队列 } int main() { int arr[] = {1, 2, 3, 4, 5, -1, 6, -1, -1, 7}; // 示例输入 int len = sizeof(arr) / sizeof(int); TreeNode* root = NULL; createTree(arr, len, &root); return 0; } ``` 在示例中,我们定义了一个长度为10的顺序数组,其中-1表示空节点。通过createTree函数,将其转换为二叉链表存储二叉树,并返回根节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值