二叉树特点与操作

1. 数据的逻辑结构

数据结构分为线性结构和非线性结构
线性结构:一对一关系(1:1)
   1.线性表
   2.栈和队列
   3.字符串、数组、广义表
非线性结构:非一对一关系
   1.树形结构:(1:n)
   2.图形结构:(m:n)

2. 二叉树

2.1 二叉树的定义

定义: n个结点的有限集合,或为空集(n=0);由一个根节点和两棵互不相交的左子树和右子树的二叉树组成。
特点:
    1.每个结点最多2个孩子
    2.子树有左右之分,次序不能颠倒
    3.二叉树可以为空集,也可只含根
注意: 树和二叉树是两个概念

2.2 二叉树的性质

1.在二叉树的第i层上最多有2^(i-1)个结点(i>12.深度为k的二叉树至多有2^k-1个结点(k>=13.对任何一棵二叉树T,如果其叶子数为i,度为2的结点数为j,则有 i = j + 1;
4.具有n个结点的完全二叉树深度为[log2n]+1;//(以2为底)

2.3 满二叉树

定义:一棵深度为k且有2^k-1个结点的二叉树
特点:
    1.每一层上的结点数都是最大结点数(即每层都满)
    2.叶子结点都在最底层

2.4 完全二叉树

定义:深度为k的具有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号为1~n的结点,一一对应。
特点:
    1.叶子只可能分布在层次最大的两层上
    2.对任一个结点,如果其右子树的最大层次为i,则其左子树的最大层次必为i或者i+1;:在满二叉树中,从最后一个结点开始连续去掉任意个结点,即是一棵完全而叉树。

2.5 二叉树顺序表示

#define MAXSIZE 100;
typedef TElemType SqBiTree[MAXTSIZE];
SqBiTree bt;

2.6 二叉树链式表示

typedef struct BiNode{
   TElemType data;
   struct BiNode *lchild,*rchild;//左右孩子指针
}BiNode,*BiTree;: n个结点,则有2n个指针域;空指针数目为n+1;

3. 遍历二叉树

3.1 先序遍历二叉树

算法步骤:
若二叉树为空,则空操作
否则:
1.访问根节点
2.先序遍历左子树
3.先序遍历右子树

Status PreOrderTraverse(BiTree T){
   if(T==NULL)
      return OK;
   else{
      visit(T);//访问根节点
      PreOrderTraverse(T->lchild);
      PreOrderTraverse(T->rchild);
   }
}

3.2 中序遍历二叉树

算法步骤:
若二叉树为空,则空操作
否则:
1.中序遍历左子树
2.访问根节点
3.中序遍历右子树

Status InOrderTraverse(BiTree T){
   if(T==NULL)
      return OK;
   else{
      InOrderTraverse(T->lchild);
      visit(T);//访问根节点
      InOrderTraverse(T->rchild);
   }
}

3.2 后序遍历二叉树

算法步骤:
若二叉树为空,则空操作
否则:
1.后序遍历左子树
2.后序遍历右子树
3.访问根节点

Status PostOrderTraverse(BiTree T){
   if(T==NULL)
      return OK;
   else{
      PostOrderTraverse(T->lchild);
      PostOrderTraverse(T->rchild);
      visit(T);//访问根节点
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值