我在开始学习二叉树(binary tree)的时候,问了朋友一个很好玩的问题:如何给程序输入一个二叉树?因为我所理解的二叉树是长这个样子的:
我就想让我朋友教我如何输入一个这个的二叉树。我朋友很不知所措的,就给我严肃的画了一个这样的二叉树图。因为我那时不能理解,为啥计算机知道74的左边是62呢?
哈哈,事实上,这是一个让我开始理解数据抽象的问题。如何把一个具体事物,通过类的思想,来进行抽象化,或者说是数据化。
相信很多读者都已经知道Node
Class Node {
int val;
Node left;
Node right;
public Node(int x) {
this.val = x; // will talk about the Constructor later
}
}
那么这个Node是啥样的呢?
当我们需要建造一个二叉树,那每一个数的节点(Node)需要存储自己的值(比如一个int,也可以是任何其他的数据类型,比如char),然后需要存储自己的左节点(Node)和右节点(Node)。然后我们只需要一个Node Root指向顶点,就能够知道整棵树的信息。那么由此可见,一个类的建造,就是从数据抽象开始来完成实现。而类里面的变量(这里是实例变量)就反应了这个类所被定义的属性。
那么,我们在来看一个例子。需要建立一个朋友圈,来存储每个人的信息,比如id,姓名,年龄,性别和朋友。那么这个数据抽象就自然而然得到了:
Class Person {
long id;
String name;
int age;
boolean isMale;
List<Person> friends;
}
然后可以理解成如下图所示,一个Person类所包含了哪些数据类型。
这样,一个“人”的数据抽象就完成了。那么可以通过程序,知道一个“人”的信息,并能实现创建,更改和删除的操作。
数据抽象,实现了一个具体的实例或者具体的类,从现实到计算机世界的转变。而这个是面向对象编程的一个重要概念。