引言
- 树是重要的数据结构;
- 本文简单介绍了树和二叉树的概念;
- 本文详细实现了二叉查找树;
树的基本术语:
- 树(Tree)是由显示节点间关系的边(edge)相连而成的节点的集合;
- 这些节点排列在表明节点层次的各层(level)上;
- 顶层是一个称为根(root)的单独节点;
- 树的高度是树的层的数目,一般的,树的高度是从根到叶子的最长路径的长度加一;
- 树的每个后继层中的节点是其上一层节点的孩子(children);
- 有孩子的节点是这些孩子的双亲(parent);
- 以某结点为根的子树中的任一节点成为该节点的子孙/后代(descendent);
- 从根到某节点所经分支上的所有节点成为该节点的祖先(ancestor);
- 双亲相同的孩子们被称为兄弟(sibling);
- 没有孩子的节点成为叶子(leaf)节点;
- 不是叶子节点的节点被称作非叶节点(nonleaf);
树的分类:
- 一般树(general tree):树中的每个节点可以有任意数量的孩子;
- n叉树(n-ary tree):树中的每个节点的孩子数量不超过n;
- 二叉树(binary tree):树种每个节点至多有两个孩子;
二叉树:
- 二叉树每个节点至多有两个孩子,分别为左孩子(left child)和右孩子(right child);
- 二叉树节点的子树被称为左子树(left subtree)和右子树(right subtree);
- 二叉树的左子树是其根的左子树,二叉树的右子树是其根的右子树;
- 二叉树中每个非叶节点都恰好有两个孩子,且最后一层全部填满,则称二叉树是满的(full);
- 二叉树中除了最后一层外其余层都含有尽可能多的节点,并且最后一层上的节点是从左到右填满的,则称这棵树是完全的(complete);
二叉查找树
- 每个节点的数据大于该节点左子树的数据;
- 每个节点的数据小于该节点右子树的数据;
二叉查找树的实现
- Node定义节点类
1 | package binarytree; |
- BinaryTree类实现了二叉查找树的大部分方法
1 | package binarytree; |
BinaryTreeTest为测试类
1 | package binarytree; |