c使用二叉链表创建二叉树遇到的一些疑问和思考

二叉链表存储二叉树

学习的时候参考的是《大话数据结构》,书中是这样定义的

typedef char TElemType;

typedef struct BiTNode {
    TElemType data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

结构是这样的,每个节点都存储着当前节点的值,还存储着指向左节点的指针和右节点的指针

typedef 是干什么的

typedef 可以用来定义真实的类型名

一开始我不理解

typedef struct BiTNode {

}*BiTree;

后来通过类比,char === TElemType
那么 BiTree = struct BiTNode*;

所以使用 typedef 可以定义真实类型名,也方便我们后期维护,后期如果我们需要修改变量的类型,可以直接修改 typedef 的定义就可以了

创建二叉树的时候为什么要传指向二叉树节点的指针的指针 struct BiNode* *T

这个问题的存在还是自己没有真正理解指针的使用场景,当我们创建新的节点的时候,我们首先要需要定义一个指向节点地址的指针,我们将这个指针传入到函数当中,我们这个指针的指向是结构体的地址,所以如果我们想要获取结构体的话
需要使用 *T 获取这个结构体指针的内容,有点绕,需要我们平常使用的时候多多留心使用

以后解决问题可以用到的思想和方法

类比 类似于 数学中的 数学归纳法 n = 1,n = 2,n = 3 .....

将我们不熟悉的东西或者感觉到陌生和害怕的东西转化为我们使用过的熟悉的东西或者知识点进行理解和使用。

原文地址:https://www.cnblogs.com/zhangpengfei5945/p/11731321.html

时间: 2024-10-06 10:09:49

c使用二叉链表创建二叉树遇到的一些疑问和思考的相关文章

二叉链表存储二叉树

链式存储结构 二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系. 通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址.其结点结构为: 其中,data域存放某结点的数据信息:lchild与rchild分别存放指向左孩子和右孩子的指针,当左孩子或右孩子不存在时,相应指针域值为空(用符号∧或NULL表示).利用这样的结点结构表示的二叉树的链式存储结构被称为二叉链表,如图5-8所示. (a) 一棵二叉树 

二叉树的二叉链表存储及其Java实现

二叉链表存储的思想是让每个节点都记住它的左.右两个子节点,为每个节点增加left.right两个指针,分别引用该节点的左.右两个子节点,如图所示: 其中,每个节点大致有如下定义: class Node{ T data; Node left; Node right; } 对于这种二叉链表存储的二叉树,如果程序需要,为指定节点添加子节点也非常容易,让父节点的left.right引用指向新节点即可. Java实现代码: package com.liuhao.DataStructures; public

数据结构之---C语言实现二叉树的二叉链表存储表示

//二叉树的二叉链表存储表示 //杨鑫 #include <stdio.h> #include <stdlib.h> #define max(a, b) a > b ? a : b //自定义max()函数 typedef char TELemType; //定义结二叉树的构体 typedef struct BTree { TELemType data; struct BTree *lChild; struct BTree *rChild; }BinTree; //二叉树的创

_DataStructure_C_Impl:二叉树的二叉链表存储结构

// _DataStructure_C_Impl: #include<stdio.h> #include<stdlib.h> #define MaxSize 100 typedef char DataType; typedef struct Node{ //二叉链表存储结构类型定义 DataType data; //数据域 struct Node *lchild; //指向左孩子结点 struct Node *rchild; //指向右孩子结点 }*BiTree,BitNode;

二叉树的二叉链表存储

1. 版本信息 (1)CentOS 6.4发行版64位,uname -a 显示如下: Linux localhost.localdomain 3.11.6 #1 SMP Sat Nov 2 23:25:40 KST 2013 x86_64 x86_64 x86_64 GNU/Linux (2)Eclipse: Version: Kepler Service Release 2 (3)Tomcat: apache-tomcat-7.0.53 (4)Mysql:      mysql-server-

C#实现二叉树 二叉链表结构

二叉链表存储结构: 二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系. 通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址.其结点结构为: 其中,data域存放某结点的数据信息:lchild与rchild分别存放指向左孩子和右孩子的指针,当左孩子或右孩子不存在时,相应指针域值为空(用符号∧或NULL表示).利用这样的结点结构表示的二叉树的链式存储结构被称为二叉链表,如图5-8所示. C#实现代码

[数据结构]二叉树之二叉链表的类模板实现

该类模板实现了一个二叉树的模板类,采用二叉链表实现. 定义二叉树节点类,采用二叉链表实现. ///////////////////////// #include <iostream> #include <cstdlib> #include <stack> #include <deque> using namespace std; template<class T> struct BinTreeNode //二叉树节点类的定义,使用二叉链表 { T

二叉树的二叉链表存储结构及C++实现

前言:存储二叉树的关键是如何表示结点之间的逻辑关系,也就是双亲和孩子之间的关系.在具体应用中,可能要求从任一结点能直接访问到它的孩子. 一.二叉链表 二叉树一般多采用二叉链表(binary linked list)存储,其基本思想是:令二叉树的每一个结点对应一个链表结点链表结点除了存放与二叉树结点有关的数据信息外,还要设置指示左右孩子的指针.二叉链表的结点结构如下图所示: 二叉树结点结构 lchild data rchild 其中,data为数据域,存放该结点的数据信息: lchild为左指针域

建立二叉树(二叉链表存储)

#include<stdio.h> #include<stdlib.h> //二叉链表 //typedef struct BitLink { // int data; // struct BitLink* leftChild; //左指针 // struct BitLink* rightChild; //右指针 //}bitlink; //用二叉链表存储方式建树 typedef struct BitTree { int data; struct BitTree* LChild; /