数据结构与算法 --- 7(二叉树)

树的概念

首先,让我们来了解一下树的一些基本概念。
下图为一颗一般树。


image.png

树,有且只有一个根结点,哪怕只有一个结点,它其实也是一棵树。
孩子:如图,B,C,D为A的孩子。
度:结点所拥有子树的个数。(A结点的度就是3,B结点的度是2)。
叶子:度为0的结点,称为叶子结点,或者终端结点。(K,J,F,G,M,I,J为叶子结点)
双亲:上一个结点,在树中,双亲指的是一个结点。
兄弟:同属于一个双亲结点下的结点。
高度:距离最长的叶子节点的长度。
深度:从根结点到当前结点的长度。
层:从根节点开始计算,字面意思。

二叉树概念

除了根节点,每个结点最多只有2颗子树。这样的树,我们称为二叉树。

特殊二叉树。

1.斜树

image.png

image.png

2.满二叉树

每一个结点都有左结点和右结点,并且所有的叶子都在一个层级上面。这样的树,称为满二叉树。


image.png

3.完全二叉树

具备有n个结点的二叉树。按照陈序编号陈列,这样的树,称为完全二叉树。


image.png

二叉树的顺序存储结构分析

当二叉树为一颗完全二叉树时,可以使用一个数组进行存储。第一个元素就是根结点。


image.png

当二叉树不是完全二叉树时。


image.png

image.png

空结点使用null来填充。很多空间是被浪费的。
所以一般顺序存储只使用在完全二叉树上。

遍历

1.前序遍历

image.png
void PreOrderTraverse(BiTree T)
{
    if(T==NULL)
        return;
    printf("%c",T->data);/* 显示结点数据,可以更改为其它对结点操作 */
    PreOrderTraverse(T->lchild); /* 再先序遍历左子树 */
    PreOrderTraverse(T->rchild); /* 最后先序遍历右子树 */
}

中序遍历

image.png
void InOrderTraverse(BiTree T)
{
    if(T==NULL)
        return ;
    InOrderTraverse(T->lchild); /* 中序遍历左子树 */
    printf("%c",T->data);/* 显示结点数据,可以更改为其它对结点操作 */
    InOrderTraverse(T->rchild); /* 最后中序遍历右子树 */
}

后序遍历

image.png
void PostOrderTraverse(BiTree T)
{
    if(T==NULL)
        return;
    PostOrderTraverse(T->lchild); /* 先后序遍历左子树  */
    PostOrderTraverse(T->rchild); /* 再后序遍历右子树  */
    printf("%c",T->data);/* 显示结点数据,可以更改为其它对结点操作 */
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 树形结构是一种十分重要的数据结构。二叉树、树与树林都属于树形结构。 树形结构每个结点最多只有一个前驱结点,但可以有...
    cain_huang阅读 2,127评论 0 11
  • 目录 1、什么是树 2、相关术语 3、二叉树 3.1、二叉树的类型 3.2、二叉树的性质 3.3、二叉树的结构 3...
    我哈啊哈啊哈阅读 2,725评论 0 10
  • 1.树(Tree): 树是 n(n>=0) 个结点的有限集。当 n=0 时称为空树。在任意一颗非空树中:有且仅有一...
    ql2012jz阅读 1,199评论 0 3
  • 1.树和二叉树的定义 (1) 树的定义 树是n (n≥0) 个结点的有限集。 n=0 时称为空树。在任意一棵非空树...
    yinxmm阅读 2,590评论 0 3
  • 昨晚 你突然跟我说 我发现你从来不认真读书 你是不是从没有认真读过一本专业书? 我一愣 很尴尬 嘴里说,好像是哈 ...
    蓝心百合阅读 185评论 1 0

友情链接更多精彩内容