首先,选择一个合适的数据结构存储多叉树,我使用了“左孩子右兄弟”的方法,使用二叉树来存储多叉树,便于实现和遍历。
其次,宽度优先搜索时:
- 用队列(先进先出)保存遍历路径。
- 搜索顺序:对节点A,先访问节点的左节点(第一个孩子节点),从该左节点开始一直向右遍历直到最右叶子节点(所有兄弟节点),此时遍历完A的所有直接孩子。遍历的同时,节点入队列。
- 遍历完A的孩子后,取队列中的下一个节点,继续遍历其孩子节点。直到队列为空。
首先,选择一个合适的数据结构存储多叉树,我使用了“左孩子右兄弟”的方法,使用二叉树来存储多叉树,便于实现和遍历。
其次,宽度优先搜索时:
快速排序:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38#include <iostream>
using namespace std;
int n[5] = {4,3,1,5,2};
void quickSort(int s, int t);
int sort(int s, int t);
int main()
{
quickSort(0,4);
for (int i=0;i<5;i++) cout<<n[i];
return 0;
}
void quickSort(int s, int t)
{
if(s>=t) return;
int k = sort(s, t);
quickSort(s,k-1);
quickSort(k+1,t);
return;
}
int sort(int s, int t)
{
int key = n[s];
while(s<t)
{
while(n[t]>=key&&t>s) t--;
n[s] = n[t];
s++;
while(n[s]<=key&&t>s) s++;
n[t] = n[s];
t--;
}
n[s] = key;
return s;
}
题目:如何查找单链表的倒数第n个指针。
算法一:第一次遍历到链表末尾,找到链表长度N;第二遍遍历,找到第N-n个节点。
算法二:设立两个指针,p1指向头节点,p2往前走n步,这样,p2与p1之间间隔n个指针。这样,当p2到达末尾是,p1则为倒数第N-n个节点。