给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
示例 1:

| 12
 
 | 输入:root = [1,2,3,null,5]输出:["1->2->5","1->3"]
 
 | 
示例 2:
提示:
- 树中节点的数目在范围 [1, 100]内
- -100 <= Node.val <= 100
迭代法(后序遍历)
访问到叶子节点时栈中元素为根节点到叶子结点的路径
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 
 | class Solution {
 public List<String> binaryTreePaths(TreeNode root) {
 List<String> ans  = new ArrayList<>();
 String pathStr = new String();
 
 if(root==null) return ans;
 Stack<TreeNode> st = new Stack<>();
 TreeNode pre = null;
 
 while(root != null || !st.isEmpty()){
 while(root!=null){
 st.push(root);
 root = root.left;
 }
 root = st.peek();
 if(root.right == null || root.right == pre){
 if(root.left == null && root.right == null){
 pathStr = "";
 for(int i = 0 ; i < st.size()-1 ; i++){
 TreeNode node = st.get(i);
 pathStr += String.valueOf(node.val);
 pathStr += "->";
 }
 pathStr += st.peek().val;
 ans.add(pathStr);
 }
 root = st.pop();
 pre = root;
 root = null;
 }else{
 root = root.right;
 }
 }
 return ans;
 }
 
 }
 
 | 
回溯法
使用先序遍历将所有访问的节点加入到路径path
遍历到叶子节点时,得到一条根节点到叶子结点的路径
若已访问完包含该节点的所有路径,则从路径中删除该节点,可以通过回溯实现
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 
 | class Solution {List<String> ans  = new ArrayList<>();
 List<Integer> path = new ArrayList<>();
 String pathStr = new String();
 
 public List<String> binaryTreePaths(TreeNode root) {
 traversal(root, path ,ans);
 return ans;
 }
 
 
 
 public void traversal(TreeNode root, List<Integer> path , List<String> ans){
 if(root==null) return;
 path.add(root.val);
 
 if(root.left==null&&root.right==null){
 String pathStr = "";
 for(int i = 0 ; i < path.size()-1 ; i++){
 pathStr += String.valueOf(path.get(i));
 pathStr += "->";
 }
 pathStr += String.valueOf(path.get(path.size()-1));
 ans.add(pathStr);
 return;
 }
 if(root.left!=null){
 traversal(root.left, path , ans);
 path.remove(path.size()-1);
 }
 if(root.right!=null){
 traversal(root.right , path , ans);
 path.remove(path.size()-1);
 }
 }
 }
 
 |