二叉树-顺序存储

本文详细介绍了二叉树的概念,包括其形态、满二叉树和完全二叉树的特性。讨论了节点数量与层数的关系,以及在完全二叉树中的节点编号规律,帮助理解二叉树的结构和性质。
摘要由CSDN通过智能技术生成

一、 二叉树的特点
  1. 每个节点最多有两棵子树。
  2. 左子树和右子树是有顺序的,次序不能颠倒。
  3. 即使树中某节点只有一棵子树,也要区分它是左子树还是右子树。
  4. 二叉树有 5 种形态,空二叉树,只有一个根节点,根节点有左子树,根结点只有右子树,根结点既有左子树右子树。
二、 特殊二叉树
  1.  斜树,所有节点都只有左子树是左斜树,所有节点都是只有右节点的二叉树叫有斜树。
  2.  满二叉树,在一棵二叉树,所有的分支节点都存在左子树和右子树,并且所有叶子都在同一层上。

    特点:
    1 叶子节点只能出现在最下一层。
    2 非叶子节点的度一定是2。
    3 在同样深度的二叉树中,满二叉树的4 节点的个数最多,叶子树最多。

  3.  完全二叉树, 对一课具有 n 个节点的二叉树按层序编号,如果编号为 i(1 <= i <= n)的节点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则称这棵树为完全二叉树。

    特点:
    1 叶子节点只出现在最下两层
    2 最下层的叶子一定集中在左部的连续位置
    3 倒数二层,如有叶子结点,一定都在右部连续位置。
    4 如果度为1,该结点只有左孩子,不存在只有右子树的情况。
    5 同样结点数的二叉树,完全二叉树的深度最小。

    判断是否是完全二叉树按照满二叉树的结构逐层编号,如果出现空档,则说明不是完全二叉树。
三、二叉树性质:
  1. 在二叉树的第 i 层至多有 个结点 ( k >= 1)。
  2. 深度为 k 的二叉树至多有  - 1 个结点 (k >= 1) 。
  3. 对任何一棵二叉树 T ,如果其终端结点数(叶子节点数)为 n0 ,度为 2 的节点数为 n2,则 n0 = n2 + 1;
  4. 具有 n 个节点的完全二叉树的深度为(下溢符号表示不大于 x 的最大整数)。
  5. 对一棵有 n 个节点的完全二叉树的结点按层序编号,对任一节点 i (1 <= i < =n )有:
    1 若 i = 1,则节点 i 是二叉树的根,无双亲。如果 i > 1,则其双亲节点为
    2 若 2i > n, 则节点无左孩子(节点 i 为叶子节点);否则左孩子是节点2i。
    3 若 2i+1 > n,则节点 i 无右孩子;否则右孩子就是节点 2i+1 。

叶子节点:度为 0 的节点。






二叉树的顺序存储

#include <iostream>
#include <stdlib.h>
#include "math.h"
#include "time.h"
using namespace std;

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

#define MAXSIZE 100
#define MAX_TREE_SIZE 100

typedef int Status;
typedef int  TElemType;
typedef TElemType SqBiTree[MAX_TREE_SIZE]; // 0 号单元存储根节点

typedef struct {

    int level,order; //节点的层,本层序号(按满二叉树计算)

}Postion;

TElemType Nil = 0;   //设整型以 0 为空

Status visit(TElemType c){

    cout<<c<<" ";

    return OK;
}

// 构造空二叉树 T 。因为 T 是固定数组,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值