Given a binary tree, return all root-to-leaf paths.
For example, given the following binary tree:
1
/ \
2 3
\
5
All root-to-leaf paths are:
[“1->2->5”, “1->3”]
析:想办法层次遍历,每个结点都保存从根到它的路径,判断是否叶子叶子就放入指定的容器。
public List<String> binaryTreePaths(TreeNode root) {
List<String> list = new ArrayList<>();
// <结点,从根到该点的路径信息>
Map<TreeNode, String> map = new HashMap<>();
if(root==null)
return new ArrayList<>();
map.put(root, root.val+"->");
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
TreeNode node = queue.poll();
if(node.left!=null){
map.put(node.left, map.get(node)+node.left.val+"->");
queue.offer(node.left);
}
if(node.right!=null){
map.put(node.right, map.get(node)+node.right.val+"->");
queue.offer(node.right);
}
// 如果该点是叶子
if(node.left==null && node.right==null)
list.add(map.get(node));
}
for(int i=0;i<list.size();i++){
String s = list.get(i);
list.set(i, s.substring(0, s.length()-2));
}
return list;
}