给你一个二叉树的根节点 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);}
