您的位置:首页 > 其它

《leetCode》:Binary Tree Paths

2016-07-10 21:23 316 查看

题目

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"]


思路

利用递归即可解决。求当前节点的左子树和右子树的路径,然后将当前节点加入到这些路径的前面。

实现代码如下:

package com.wrh.leetcode;

import java.util.ArrayList;
import java.util.List;

public class BinaryTreePaths {

public List<String> binaryTreePaths(TreeNode root) {

List<List<Integer>> res = binaryTreePathHelper(root);

List<String> paths = new ArrayList<String> ();
for(List<Integer> list : res){
StringBuilder sb = new StringBuilder();
for(int i=0;i<list.size();i++){
if(i==list.size()-1){
sb.append(list.get(i));
}
else{
sb.append(list.get(i)).append("->");
}
}
paths.add(sb.toString());

}

return paths;

}

private List<List<Integer>> binaryTreePathHelper(TreeNode root) {

List<List<Integer>> res = new ArrayList<List<Integer>>() ;
if(root==null){
return res;
}
if(root.left==null&&root.right==null){//叶子节点
List<Integer> list = new ArrayList<Integer>();
list.add(root.val);
res.add(list);
return res;
}
else {
List<List<Integer>> leftRes = binaryTreePathHelper(root.left) ;
List<List<Integer>> rightRes = binaryTreePathHelper(root.right) ;
for(List<Integer> list : leftRes){
list.add(0,root.val);
res.add(list);
}
for(List<Integer> list : rightRes){
list.add(0,root.val);
res.add(list);
}
return res;

}
}

public static void main(String[] args){
TreeNode t = new TreeNode(3);
TreeNode t2 = new TreeNode(5);
TreeNode t3 = new TreeNode(6);
t.left = t2 ;
t.right = t3 ;

List<String> list = new BinaryTreePaths().binaryTreePaths(t);
for(String str:list){
System.out.println(str);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: