二叉树简介

二叉树

First. 二叉树和二次树不同,二次树至少有一个结点的度为2,二叉树没有这个要求。
二次树不区分左右子树,二叉树严格区分左右子树

满二叉树: 所有的分支结点都有左右孩子结点,叶子结点在最下面一层

非空满二叉树特点:1.叶子结点在最下面一层 2.只有度为0和2的点

完全二叉树:一层一层从左往右地排,刚好没排完.。所以若是存在度为1的结点,只有一个

二叉树的性质:

  1. 非空二叉树上的叶子结点数等于双分支结点数+1.

    证明:设二叉树叶子结点数为n0,单分支结点数为n1,双分支结点数为n2,则

    总结点数=n0+n1+n2

    总度数=2n2+n1

    但是,由树的性质,结点数=总度数+1

    化简可得,n0=n2+1

  2. 非空二叉树的第i层最多有wi-1个结点

  3. 高度为h的二叉树最多有2h-1个结点

  4. 完全二叉树中编号为i(i>=1&&i<=n,n为结点数)的结点有以下性质:

    (1)若2i<=n,则为分支结点,否则为叶子结点(由第一条双分支结点与叶子结点的数量关系可得,因为完全二叉树只有双方分支结点和叶子结点,至多有一个单亲结点

    (2)若n为奇数,则没有单分支结点。若n为偶数,则有一个单分支结点

    (3)若编号为i的结点有左孩子结点,则左孩子结点编号为2i,若有右孩子结点,则编号为2i+1。

    (4)除根节点外,若一个结点编号为i,则双亲结点编号为i/2(向上取整)

  5. 具有n个结点的完全二叉树高度为log2(n+1)(向上取整)或log2n+1。

树转换为二叉树:
​ 1.在所有兄弟结点之间加一条线
​ 2.树中的每个结点只保留与长子之间的连线
​ 3.以根节点为周线,将树顺时针旋转45°

二叉树转为树:
​ 1.若某结点是其双亲结点的左孩子,则将它的右孩子、右孩子的右孩子与双亲连接起来。
​ 2.删除所有双亲结点与右孩子的连线
​ 3.以根结点为轴心,逆时针转动45°

二叉树的存储结构

顺序存储结构:

1.对于完全二叉树,按照编号顺序存储即可

2.对于一般的二叉树,保留空结点的位置,依旧按照编号填入,空结点的数据置一个特殊的符号即可

typedef ElemType SqBinTree[MaxSize];

若空结点非常多,则会造成空间大量浪费。

顺序存储查找一个结点的双亲和孩子结点也很方便(参见二叉树的性质)

链式存储结构

二叉链

typedef struct node
{
    ElemType data;
    struct node * lchild;
    struct node * rchild;
}BTNode;

为了查找双亲结点方便,有时会加入一个指针域 struct node * parent

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值