一、数据结构的基本操作
对于任何数据结构,本质操作为:增删查改。
具体操作本质:遍历 + 访问
1.1 典型遍历框架
1)数组,线性结构
void traverse(int[] arr){
for(int i = 0 ; i < arr.length ; i++){
//迭代访问arr[i]
}
}
2)链表,线性or非线性结构
class ListNode{
int val;
ListNode next;
}
void traverse(ListNode head){
for(ListNode p = head; p->next != NULL ; p = p->next){
//迭代访问p->val
}
}
void traverse(ListNode head){
//访问 head.val
traverse(head->next);
}
1.2具体遍历框架
1)二叉树遍历框架
class TreeNode{
int val;
TreeNode left, right;
}
void traverse(TreeNode root){
//访问root.val
traverse(root.left);
traverse(root.right);
}
二叉树本质为每个节点带有两条指针的链表。
若是三叉树、四叉树…n叉树要怎么遍历呢?沿着这条思路就很简单了。
2)N叉树遍历框架
class TreeNode{
int val;
TreeNode[] children;
}
void traverse(TreeNode root){
//访问root.val
for(TreeNode child : root.children){
traverse(child);
}
}
N叉树可以扩展为图的遍历,因为图就是好几颗N叉树的结合体。