使用map建图
利用DFS遍历树 并同时建图
https://leetcode.com/problems/step-by-step-directions-from-a-binary-tree-node-to-another/
第一种算法 利用DFS建图 再使用bfs找最短路径
public void dfs(TreeNode root){
if(root == null) return;
int v = root.val;
if(root.left != null){
int l = root.left.val;
if(!map.containsKey(v)){
map.put(v, new ArrayList<>());
}
map.get(v).add(new int[]{l, 1});
if(!map.containsKey(l)){
map.put(l, new ArrayList<>());
}
map.get(l).add(new int[]{v, 0}); //子节点到父节点
dfs(root.left);
}
if(root.right != null){
int r = root.right.val;
if(!map.containsKey(v)){
map.put(v, new ArrayList<>());
}
map.get(v).add(new int[]{r, 2});
if(!map.containsKey(r)){
map.put(r, new ArrayList<>());
}
map.get(r).add(new int[]{v, 0}); //子节点到父节点
dfs(root.right);
}
}
BFS的时候 visit数组标记已走过的点