树与二叉树

本文详细探讨了二叉树的基本概念,包括度、双亲、兄弟关系等,并介绍了顺序存储结构和链式存储结构。重点讲解了三种遍历方式——先序、中序和后序遍历,以及它们的实现细节。此外,还涉及了森林、有序树的概念以及森林和二叉树的区别。
摘要由CSDN通过智能技术生成

基本概念

树的度—— 一棵树中最大的结点度数
双亲—— 孩子结点的上层结点叫该结点的双亲
兄弟—— 同一双亲的孩子之间互成为兄弟
祖先—— 结点的祖先是从根到该结点所经分支上的所有结点
子孙—— 以某结点为根的子树中的任一结点都成为该结点的子孙
结点的层次—— 从根结点算起,根为第一层,它的孩子为第二层……
堂兄弟—— 其双亲在同一层的结点互称为堂兄弟。
深度—— 树中结点的最大层次数
有序树—— 如果将树中结点的各子树看成从左至右是有次序的(即不能互换),则称该树为有序树,否则称为无序树。在有序树中最左边的子树的根称为第一个孩子,最右边的称为最后一个孩子。
森林—— m(m0)棵互不相交的树的集合

二叉树的存储结构

3.1 ①顺序存储结构 ②链式存储结构
(1)顺序存储结构
实际上就是用一个一维数组按照自上而下,自左至右的将每一层的结点放入数组中。

(2)链式存储结构
实际上就是一个链表,链表的结点至少得包含三个域:数据域和左右指针域(为了方便找到结点的双亲,还可以在结点的结构中增加一个指向其双亲结点的指针域)

二叉树的链式储存如下

  typedef struct BiTNode{
    TElemType data;        //结点的数据域
    struct BiTNode *lchild,*rchild; //左右孩子指针
  }BiTNode,*BiTree;

二叉树的遍历

在这里插入图片描述

三种遍历方式:

①先序遍历(根左右)②中序遍历(左根右)③后序遍历 (左右根)
(1)先序遍历:1.访问根结点 2.先序遍历左子树 3.先序遍历右子树
如图的先序遍历为:ABDGCEF

void preOrder(BitTree t)      //先序遍历
   {
       if(t)             //树不为空
       {
           visit(t->data );        //访问节点数据,自定义访问函数visit
           preOrder (t->lchild );      //递归遍历左子树
           preOrder (t->rchild );      //递归遍历右子树
       }
   }


(2)中序遍历:1.中序遍历左子树 2.访问根结点 3.中序遍历右子树
如图的中序遍历为:DGBAECF

void inOrder(BitTree t)       //中序遍历
{ 
    if(t)          //树不为空
    {
        inOrder (t->lchild );
        visit(t->data );        //访问节点数据
        inOrder (t->rchild );
    }
}

如图的后序遍历为:GDBEFCA

void postOrder(BitTree t)     //后序遍历
{
    if(t)           //树不为空
    {
        postOrder (t->lchild );
        postOrder (t->rchild );
        visit(t->data );        //访问节点数据
    }
}

思维导图

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值