【数据结构】链表及插入删除、二叉树

1. 链表

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。

每个结点包括两个部分:存储数据元素的数据域、存储其他结点地址的指针域

单链表添加及删除:

// 单链表的添加

// 在cur之后插入new结点

new->next=cur->next;   // 先将new后继指向cur的后继

cur->next=new;    // 再将cur指向new

// 单链表的删除

// 删除cur结点

prev->next=cur->next;  // 先将prev的后继指向cur的后继

cur->next=NULL;   // cur的后继指向NULL 

双链表添加及删除:

// 双链表的添加

// 在cur之后插入new结点

new->next=cur->next;   // 先将new后继指向cur的后继

cur->next->prev=new;    // 再将cur的后继的前驱指向new

cur->next=new;     // 再将cur的后继指向new

new->prev=cur;      // 再将new的前驱指向cur

// 双链表的删除

// 删除cur结点

cur->prev->next=cur->next;   // 先将cur的前驱的后继指向cur的后继

cur->next->prev=cur->pre;    // 再将cur的后继的前驱指向cur的前驱

cur->prev=NULL;      // 将cur的前驱指向NULL

cur->next=NULL;     // 将cur的后继指向NULL

2. 树与二叉树

  1. 结点:包含数据元素和若干指向其结点的分支信息的数据结构;
  2. 结点的度:结点拥有子的个数叫该结点的度;
  3. 叶子结点(终端结点):度为0的结点;
  4. 分支结点:度不为0的结点;
  5. 孩子节点、父结点、兄弟结点:树中一个结点的子树的根结点称为这个结点的孩子结点,这个结点称为孩子结点的父亲节点,具有同一个父亲结点的孩子结点互称为兄弟结点;
  6. 结点层次:根结点层次为1,其余结点层次等于父亲结点层次加1;
  7. 祖先、子孙:树中有路径从m到n,则m为n的相先,n为m的子孙;
  8. 树的深度:树中所有结点的层次的最大数;
  9. 树的度:树中所有结点的度的最大值;
  10. 森林:m (m>0) 棵不相交的树的集合称为森林。

8dd8a1fabc9e44bfba347bf27a13e9d1.png

  • A、B、C、F是分支结点,D、H、F、G是叶子节点;
  • B的层次为2,B的度为3,树的度为3,树的深度为4;
  • A为根节点,A是B的父亲节点,B是A的孩子结点,B和C是兄弟结点;
  • B是H的祖先,H是B的子孙。

二叉树性质:

性质1:二叉树的第i层上至多有2^{i-1}个结点

性质2:深度为k的二叉树至多有2^{k}-1个结点

性质3:对于一棵非空二叉树,如果叶子结点数为n_{0},度数为2的结点数为n_{2},则有n_{0}=n_{2}+1

性质4:具有n个结点的完全二叉树深度为[\log_{2}n]+1,[x]表示不大于x的最大整数;

性质5:如果对一棵有n个结点的完全二叉树的结点按层序编号,对任一结点有:

①如果i=1,则结点是二叉树的根,无双亲;如果i>1,则其双亲是[i/2];

②如果2i>n,则结点i无左孩子;如果2i≤n,则其左孩子是2i;

③如果2i+1>n,则结点i无右孩子;如果2i+1≤n,则其右孩子是2i+1。

二叉树遍历:

前序遍历:根结点→左子树→右子树

中序遍历:左子树→根节点→右子树

后序遍历:左子树→右子树→根节点

层次遍历:从上到下逐层,同层中从左到右逐个结点

已知前序、中序遍历,可以唯一确定一棵二叉树

已知后序、中序遍历,可以唯一确定一棵二叉树

已知前序、后序遍历,可以唯一确定一棵二叉树

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值