深度优先遍历算法中java,python分别怎么实现递归调用?
1**
Java中实现深度优先遍历算法的递归方法:
// 定义一个TreeNode类
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
// 实现深度优先遍历算法的递归方法
public void dfs(TreeNode root) {
if (root != null) {
System.out.print(root.val + " ");
dfs(root.left);
dfs(root.right);
}
}
先定义了一种二叉树结构TreeNode
,包含了树节点的值、左子树、右子树。然后使用dfs
函数递归遍历二叉树,先遍历根节点,然后分别遍历该节点的左子树和右子树。如果该节点为空,则返回。
Python中实现深度优先遍历算法的递归方法:
# 定义一个二叉树节点类
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
# 实现深度优先遍历递归函数
def dfs(root):
if root:
print(root.val, end=" ")
dfs(root.left)
dfs(root.right)
首先定义了一个二叉树结构class TreeNode
,包含节点的值、左子树、右子树。然后使用dfs
函数递归遍历二叉树,先遍历根节点,然后分别遍历该节点的左子树和右子树。如果该节点为空,则返回。**
try:
_thread.start_new_thread( print_time, ("Thread-1", 2, ) )
_thread.start_new_thread( print_time, ("Thread-2", 4, ) )
except:
print ("Error: 无法启动线程")
while 1:
pass
执行以上程序输出结果如下:
Thread-1: Wed Apr 6 11:36:31 2016
Thread-1: Wed Apr 6 11:36:33 2016
Thread-2: Wed Apr 6 11:36:33 2016
Thread-1: Wed Apr 6 11:36:35 2016
Thread-1: Wed Apr 6 11:36:37 2016
Thread-2: Wed Apr 6 11:36:37 2016
Thread-1: Wed Apr 6 11:36:39 2016
Thread-2: Wed Apr 6 11:36:41 2016
Thread-2: Wed Apr 6 11:36:45 2016
Thread-2: Wed Apr 6 11:36:49 2016
执行以上程后可以按下 ctrl-c 退出。
使用Java或Python实现深度优先遍历算法的递归调用:
以下是Java代码实现深度优先遍历的递归调用:
import java.util.*;
class Graph{
int vertex;
LinkedList<Integer>[] adjList;
Graph(int vertex){
this.vertex = vertex;
adjList = new LinkedList[vertex];
for (int i = 0; i < vertex ; i++) {
adjList[i] = new LinkedList<>();
}
}
public void addEdge(int source, int destination) {
adjList[source].add(destination);
}
public void DFS(int vertex){
boolean[] visited = new boolean[this.vertex];
DFSutil(vertex, visited);
}
private void DFSutil(int vertex, boolean[] visited) {
visited[vertex] = true;
System.out.print(vertex + " ");
Iterator<Integer> itr = adjList[vertex].listIterator();
while(itr.hasNext()){
int adjNode = itr.next();
if (!visited[adjNode]) DFSutil(adjNode, visited);
}
}
}
public class Main{
public static void main(String[] args) {
Graph graph = new Graph(5);
graph.addEdge(1, 2);
graph.addEdge(1, 0);
graph.addEdge(0, 2);
graph.addEdge(2, 3);
graph.addEdge(3, 4);
System.out.print("Following is Depth First Traversal : ");
graph.DFS(1);
}
}
输出:
Following is Depth First Traversal : 1 2 0 3 4
以下是Python代码实现深度优先遍历的递归调用:
class Graph:
def __init__(self,nodes):
self.nodes = nodes
self.adj_list = {}
for node in self.nodes:
self.adj_list[node] = []
def add_edge(self, u, v):
self.adj_list[u].append(v)
self.adj_list[v].append(u)
def dfs(self, node, visited):
if node not in visited:
visited.append(node)
for neighbour in self.adj_list[node]:
self.dfs(neighbour, visited)
return visited
graph = Graph(['A', 'B', 'C', 'D'])
graph.add_edge('A', 'B')
graph.add_edge('C', 'B')
graph.add_edge('C', 'D')
# Show all connections in graph
print(graph.adj_list)
# Depth first traversal of graph starting at node 'A'
print(graph.dfs('A', []))
输出:
{'A': ['B'], 'B': ['A', 'C'], 'C': ['B', 'D'], 'D': ['C']}
['A', 'B', 'C', 'D']