今天我们来种一棵树

Image by pangziai on Pixabay 今天是一年一度的植树节,说到树,我就想到了《西游记》中的古树精,今年下半年。。。好了好了,不皮了,我们直接开花。今天就趁着植树节来种一棵我们程序员的“树”吧。 什么是“树”? 在种树之前,我们先来了解下什么是树?看个例子: 不对不对,放错了,应该是下面这个: 维基百科对于树的定义是: 在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由 n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 说白了,只要是形如上图的数据结构就叫树。 二叉树 自然界中有“迎客松”、“轩辕柏”这样出名的树,我们今天要种的树也是我们 IT 圈里面的扛把子——“二叉树”。 二叉树是数据结构中一种重要的数据结构,也是树表家族最为基础的结构之一。 二叉树的特点是每个结点最多有两个子树,左边的叫做左子树,右边的叫做右子树,二叉树要么为空,要么由根结点、左子树和右子树组成,而左子树和右子树分别是一棵二叉树。 下面这棵树就是一棵二叉树。 常见术语 结点(node):上图中的 A、B、C。。。就是一个结点 结点的度:一个结点含有的子树的个数称为该结点的度 树的度:一棵树中,最大的结点的度称为树的度 深度:对于任意节点 n , n 的深度为从根到 n 的唯一路径长,根的深度为 0; 高度:对于任意节点 n , n 的高度为从 n 到一片树叶的最长路径长,所有树叶的高度为 0; 种树 接下来的代码均用 Java 展现,完整代码可在公众号「01 二进制」后台回复“二叉树”查看。 现在我们就开始种一棵如上图的树吧。根据定义,我们了解到,结点是一棵二叉树最重要的元素,而作为一个结点,必须满足以下条件: 根结点 左子树和右子树 因此我们可以创建一个结点类(TreeNode): class TreeNode { String data; TreeNode left; TreeNode right; TreeNode(String data) { this....