Leetcode 257. Binary Tree Paths
题目链接: Binary Tree Paths
难度:Easy
题目大意:
输出二叉树中所有根节点到叶子节点的路径。
思路:
思路1:
BFS,层级遍历。
思路2:
参考高赞回答下的评论,递归,并使用了回溯来降低时间复杂度。这种方法比思路快不少。
代码
思路1代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> res=new ArrayList<>();
Queue<TreeNode> nodes=new LinkedList<>();
Queue<String> path=new LinkedList<>();
nodes.offer(root);
path.offer(Integer.toString(root.val));
while(!nodes.isEmpty()){
TreeNode node=nodes.poll();
String s=path.poll();
if(node.left==null&&node.right==null){
res.add(s);
}
if(node.left!=null){
nodes.offer(node.left);
path.offer(s+"->"+node.left.val);
}
if(node.right!=null){
nodes.offer(node.right);
path.offer(s+"->"+node.right.val);
}
}
return res;
}
}
思路2代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> res=new ArrayList<>();
StringBuilder sb=new StringBuilder();
helper(root,sb,res);
return res;
}
public void helper(TreeNode root,StringBuilder sb,List<String> res){
if(root==null){
return;
}
int len=sb.length();
sb.append(root.val);
if(root.left==null&&root.right==null){
res.add(sb.toString());
}
else{
sb.append("->");
if(root.left!=null){
helper(root.left,sb,res);
}
if(root.right!=null){
helper(root.right,sb,res);
}
}
sb.setLength(len);//回溯
}
}