算法基础
-
数据结构的存储方式(数组/链表)
- 数组与链表的特点
- 栈
- 队列
- 图
- 散列表
- 树(查找/插入/删除)
-
数据结构的基本操作(遍利/访问)
- 两种形式:线性(for/while) 非线性(递归)
- 数组 链表 二叉树 N叉树
- 数组
void traverse(int[] arr) {
for (int i = 0; i < arr.length; i++) {
// 迭代访问 arr[i]
}
}
- 链表,兼具迭代和递归
/* 基本的单链表节点 */
class ListNode {
int val;
ListNode next;
}
void traverse(ListNode head) {
for (ListNode p = head; p != null; p = p.next) {
// 迭代访问 p.val
}
}
void traverse(ListNode head) {
// 递归访问 head.val
traverse(head.next)
}
- 二叉树,典型的非线性递归便历结构
/* 基本的二叉树节点 */
class TreeNode {
int val;
TreeNode left, right;
}
void traverse(TreeNode root) {
traverse(root.left)
traverse(root.right)
}
- N叉树,与二叉树相似
/* 基本的 N 叉树节点 */
class TreeNode {
int val;
TreeNode[] children;
}
void traverse(TreeNode root) {
for (TreeNode child : root.children)
traverse(child)
}