题目:leetcode257. 二叉树的所有路径
描述:
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
思路:
使用迭代法进行先序遍历,先序遍历一定可以找到所有的根节点到叶子结点之间的路径,但是要解决的问题是找到叶子结点之后前面的路径丢失了,所以我们需要在遍历的过程中保存遍历时经过的结点路径,我们可以在入栈的时候将路径字符串一起入栈,出栈的时候也是一起出栈,就可以了。
代码
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
public class Solution{
public List<String> binaryTreePaths(TreeNode root) {
if(root==null)
return new ArrayList<>();
List<String> result=new ArrayList<>();
String path;
Deque<Object> deque=new LinkedList<>();
deque.push(root);
deque.push(root.val+"");
while(!deque.isEmpty())
{
path=(String)deque.pop();
TreeNode node=(TreeNode) deque.pop();
if(node.left==null && node.right==null)
result.add(path);
if(node.right!=null)
{
deque.push(node.right);
deque.push(path+"->"+node.right.val);
}
if(node.left!=null)
{
deque.push(node.left);
deque.push(path+"->"+node.left.val);
}
}
return result;
}
}