数据结构中的二叉树ADT


基本概念

二叉树定义为:树中任何节点最多只有两个子节点。任何节点的最高度为二。这意味着二叉树的度为零、一或二。

在上图中,二叉树由根节点和两个子树 TreeLeft 和 TreeRight 组成。二叉树左侧的所有节点都称为左子树,二叉树右侧的所有节点都称为右子树。

实现

二叉树最多有两个子节点;我们可以直接用指针指向它们。树节点的声明与双向链表的结构声明相同,即一个节点是一个结构体,包含关键信息加上指向其他节点的两个指针(左和右)。

二叉树节点声明

typedef struct tree_node *tree_ptr;
struct tree_node
{
   element_type element1;
   tree_ptr left1; tree_ptr right1;
};
typedef tree_ptr TREE;

二叉树的类型

严格二叉树

严格二叉树定义为:所有节点都只有零个或两个子节点的二叉树。它不包含任何只有一个子节点的节点。

斜树

斜树定义为:除叶子节点外,每个节点只有一个子节点的二叉树。斜树有两种类型:左斜二叉树和右斜二叉树。

左斜二叉树

左斜树的节点只与左子节点相关联。它是一个只包含左子树的二叉树。

右斜二叉树

右斜树的节点只与右子节点相关联。它是一个只包含右子树的二叉树。

满二叉树或正则二叉树

如果所有叶子节点都在同一层,并且每个非叶子节点都恰好有两个子节点,并且它应该包含所有层中尽可能多的节点,则二叉树定义为满二叉树。高度为 h 的满二叉树最多有 2h+1 – 1 个节点。

完全二叉树

每个非叶子节点都恰好有两个子节点,但并非所有叶子节点都必须位于同一层。完全二叉树定义为:除最后一层外,所有层都具有最大数量的节点的二叉树。最后一层的元素应该从左到右填充。

几乎完全二叉树

几乎完全二叉树定义为:每个具有右子节点的节点也具有左子节点的树。具有左子节点的节点不需要具有右子节点。

一般树和二叉树的区别

一般树

  • 一般树对子节点的数量没有限制。
  • 在一般树中评估任何表达式都很困难。

二叉树

  • 二叉树最多有两个子节点。
  • 在二叉树中评估表达式很简单。

树的应用

  • 算术表达式的操作
  • 符号表的构造
  • 语法分析
  • 编写语法
  • 表达式树的创建

更新于:2020年1月8日

9K+ 浏览量

开启你的职业生涯

完成课程获得认证

开始学习
广告