一、树的几种遍历算法
1.先序遍历
首先访问 T 的根,然后递归的访问子树的根。如果这棵树是有序的,则根据孩子的顺序遍历子树。对处于 p 位置处子树的根先序遍历,其伪代码为:
Algorthm preorder(T, p):
perform the visit action for positon p
for each child c in T.children(p) do
preorder(T, c)
2. 后序遍历
可看作相反的先序遍历,优先遍历子树,再访问根
Algorithm postorder(T, p):
for each child c in T.children(p) do
postorder(T, c)
perform the visit action for position p
运行时间都为 O(n)
3. 广度优先遍历
在访问深度 d+1 的位置之前先访问深度 d 的位置。广度优先遍历广泛的应用于游戏软件上。
Algorithm breadthfirst(T):
Intialize queue Q to contain T.root()
while Q not empty do:
p = Q.dequeue() # p is the oldest entry in the queue
performm the visit action for position p
for each child c in T.children(p) do
Q.enqueue(c) # add p's children to the end of the queu