257 二叉树的所有路径
https://leetcode-cn.com/problems/binary-tree-paths/
这题其实就是中序遍历的思想而已,因为这里用的是这里的顺序是总是先输出根节点再输出叶子节点,所以,只要只要能够想到中序的递归遍历,这题就可以很好的解决。
用一个list来保存走过的节点,并且判断每个节点是否是叶子节点(也就是它的左右节点皆为空),是叶子就保存到list中。然后最后要把当前节点从这里删除哦。。
Show The Code.
class Solution {
List<String> res = new ArrayList<>();
public List<String> binaryTreePaths(TreeNode root) {
LinkedList<Integer> list = new LinkedList<>();
preTraverse(root, list);
return res;
}
public void preTraverse(TreeNode node, LinkedList<Integer> list) {
if (node == null) {
return;
}
list.add(node.val);
if (node.left == null && node.right == null) {
res.add(buildString(list));
}
preTraverse(node.left, list);
preTraverse(node.right, list);
list.removeLast();
}
// 一个用来构造字符串的方法。
public String buildString(List<Integer> list) {
StringBuilder sb = new StringBuilder();
for (int i = 0, len = list.size(); i < len; ++i) {
if (i == len - 1) {
sb.append(list.get(i));
} else {
sb.append(list.get(i) + "->");
}
}
return sb.toString();
}
}