说明:在这个系列中将会每天至少一更,使用一周时间进行数据结构及经典算法的简单梳理,同时作为投递实习及校招岗位期间的学习记录。望与诸君共勉。
前言
数据结构和算法一直是各大互联网公司的重中之重,甚至对于国外的一些头部企业来说,只要数据结构和算法掌握的够好,即可录用。所以我决定使用这个系列进行一些简单的数据结构和算法的总结,同时也是自己的学习笔记。该系列每一篇文章将通过leetcode原题的方式来加强记忆。
提示:以下是本篇文章正文内容,下面案例可供参考
一、数据结构是什么?
数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。
数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。
数据项:一个数据元素可以由若干个数据项组成。
数据对象:是性质相同的数据元素的集合,是数据的子集。
逻辑结构:是指数据对象中数据元素之间的相互关系。包括集合结构、线性结构、树形结构、图形结构。
集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间没有其它关系。
线性结构:线性结构中的数据之间是一对一的关系。
树形结构:树形结构中的数据之间存在一种一对多的层次关系。
图形结构:图形结构的数据元素是多对多的关系。
物理结构:是指数据的逻辑结构在计算机中的存储形式。顺序存储和链式存储。
顺序存储:是把数据元素存放在地址连续的存储单元里。
链式存储:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。
数据结构的几个解释:
Sartaj Sahni在他的《数据结构、算法与应用》一书中称:“数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。”他将数据对象(data object)定义为“一个数据对象是实例或值的集合”。
Clifford A.Shaffer在《数据结构与算法分析》一书中的定义是:“数据结构是 ADT(抽象数据类型Abstract Data Type) 的物理实现。”
《大话数据结构》:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
我的理解:数据结构是数据对象集以及它们在计算机中的组织方式,即物理存储结构和逻辑结构。同时也包括了与数据对象相关的操作集,以及一些高效的算法。
二、二叉树的四种遍历模式
1.二叉树的基本概念及遍历方式解读
二叉树是一种树状结构,它的一个父节点只可以有两个子节点,下图是一个典型的二叉树结构。
四种遍历方式:
先序遍历:按照根节点->左节点->右节点的顺序遍历。上面例子中的二叉树按照先序遍历的结果应该为:1245367;
中序遍历:按照左节点->根节点->右节点的顺序遍历。上面例子中的二叉树按照先序遍历的结果应该为:4251637;
后序遍历:按照左节点->右节点->根节点的顺序遍历。上面例子中的二叉树按照先序遍历的结果应该为:4526731;
层次遍历:按照每一层从左到右的方式进行遍历,遍历结果为:1234567;
2.Java代码实现过程
这四种遍历在leetcode中均有对应题目,难度为简单级别,具体题号如下:
144.二叉树的前序遍历
94. 二叉树的中序遍历
145. 二叉树的后序遍历
102. 二叉树的层序遍历
这四道题目描述是相似的,即给定一个二叉树,让我们使用一个数组来返回遍历结果。接下来我将使用递归解法和迭代解法来分别进行前三种遍历的代码实现,同时使用迭代解法对二叉树进行层序遍历。
首先我们进行二叉树的节点定义:
public class TreeNode{
int value;
TreeNode left;
TreeNode Right;
TreeNode(int x) {
value = x;
}
}
2.1.1 递归解法进行二叉树的前序遍历:
public void PreorderTraversal(TreeNode root){
if (root == null) {
return;
}
System.out.print(root.value + " ");
PreorderTraversal(root.left);
PreorderTraversal(root.rigght);
}
2.1.2递归解法进行二叉树的中序遍历:
public void InorderTraversal(TreeNode root){
if (root == null) {
return;
}
InorderTraversal(root.left);
System.out.print(root.value+" ");
InorderTraversal(root.right);
}
2.1.3递归解法进行二叉树的后序遍历:
public void PostorderTraversal(