给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
�
示例 1:
�输入:root = [1,2,3,null,5]
1
/ \
2 3
\
5
输出:[“1->2->5”,”1->3”]
示例2:
输入:root = [1]
�输出:[“1”]
�
�需要返回结果的递归算法框架
public List<String> binaryTreePaths(TreeNode root) {
List<String> result = new ArrayList<>();
binaryTreePaths(root, result);
return result;
}
public List<String> binaryTreePaths(TreeNode node, List<String> result) {
}
当遍历到某个节点时,此节点需要做什么?
1.若节点为空,则结束递归,返回结果集
2.若节点的左子树和右子树都为空,则将之前遍历的结果 path 放入结果集,结束递归,返回结果集
3.若左子树不为空,则将当前节点的值拼接到 path 中,继续递归
4.若右子树不为空,则将当前节点的值拼接到 path 中,继续递归
public List<String> binaryTreePaths(TreeNode root) {
List<String> result = new ArrayList<>();
binaryTreePaths(root, "", result);
return result;
}
public List<String> binaryTreePaths(TreeNode node, String path, List<String> result) {
if (node == null) {
return result;
}
// 若节点左子树和右子树都为空
if (node.left == null && node.right == null) {
result.add(path + node.val);
return result;
}
path = path + node.val + "->";
binaryTreePaths(node.left, path, result);
binaryTreePaths(node.right, path, result);
return result;
}
使用成员变量
�
List<String> result = new ArrayList<>();
public List<String> binaryTreePaths(TreeNode root) {
binaryTreePaths(root, "");
return result;
}
public void binaryTreePaths(TreeNode node, String path) {
if (node == null) {
return;
}
// 若节点左子树和右子树都为空
if (node.left == null && node.right == null) {
result.add(path + node.val);
return;
}
path = path + node.val + "->";
binaryTreePaths(node.left, path);
binaryTreePaths(node.right, path);
}