257. 二叉树的所有路径
给你一个二叉树的根节点 root
,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [1,2,3,null,5]
输出:[“1->2->5”,“1->3”]
示例 2:
输入:root = [1]
输出:[“1”]
思考
需要一个栈来临时存储遍历到叶子节点的序列
遍历的时候可以考虑使用前序遍历。
- 首先把该节点的val加入stack,判断该节点是否有左右子树,来判断该节点是否是叶子节点
- 如果是叶子节点,输出栈的内容到集合
- 如果不是叶子节点,无操作
- 递归其左右节点
- 递归完左右节点,stack pop出该节点的val
public List<String> binaryTreePaths(TreeNode root) {
if(root==null) return null;
List<String> list=new ArrayList<>();
Stack<Integer> stack=new Stack<>();
preOrder(list,stack,root);
return list;
}
private void preOrder(List<String> list, Stack<Integer> stack, TreeNode root) {
stack.push(root.val);
// 发现叶子节点 list添加一条路径
if(root.left==null&&root.right==null){
String s="";
for (int i = 0; i < stack.size(); i++) {
if(i!=stack.size()-1)
s = s + stack.get(i) +"->";
if(i==stack.size()-1)
s = s + stack.get(i);
}
list.add(s);
}
if(root.left!=null) preOrder(list,stack,root.left);
if(root.right!=null) preOrder(list,stack,root.right);
stack.pop();
}