public List<String> binaryTreePaths(TreeNode root) {
List<String> result = new ArrayList<String>();
order(root, result, new StringBuffer());
return result;
}
public void order(TreeNode node, List<String> result, StringBuffer sb) {
if(node == null) {
return;
}
sb.append(node.val);
if(node.left == null && node.right == null) {
result.add(sb.toString());
return;
}
sb.append("->");
//注意:这里要new,否则左右子树的路径会叠加,而不是选其中一条路径
order(node.left, result, new StringBuffer(sb));
order(node.right, result, new StringBuffer(sb));
}
这题的关键点:
在递归的时候要new一个StringBuffer对象,因为StringBuffer不是基本数据类型,调用方法传的是地址,如果两个order() 都操作同一个StringBuffer对象,那么左右子树的路径将会叠加,而不是只选其一。所以new一个StringBuffer对象的作用是让当前状态下的StringBuffer分别走两条不同的路径。