leetcode 257. 二叉树的所有路径

给定一个二叉树,返回所有从根节点到叶子节点的路径。

说明: 叶子节点是指没有子节点的节点。

示例:

输入:

1
/ \
2 3
\
5

输出: ["1->2->5", "1->3"]

解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-paths
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

采用递归,叶子节点的判断是没有左右子节点

    public List<String> binaryTreePaths(TreeNode root) {
        List<String> list = new ArrayList<>();
        if (root == null) {
            return list;
        }
        StringBuilder sb = new StringBuilder();
        adjust(root, list, sb, 0);
        return list;
    }

    // 调整
    private static void adjust (TreeNode root, List<String> list, StringBuilder sb, int n) {
        String value = "->" + root.val;
        int length = value.length();
        sb.append(value);
        if (root.left == null && root.right == null) {
            list.add(sb.substring(2));
            sb.delete(n, sb.length());
            return;
        }
        if (root.left != null) {
            adjust(root.left, list, sb, n + length);
        }
        if (root.right != null) {
            adjust(root.right, list, sb,n + length);
        }
        sb.delete(n, sb.length());
    }

虽然能完成所有的用例,不过效率不高,接下来还需要优化。。

posted @ 2021-04-16 15:51  旺仔古李  阅读(44)  评论(0编辑  收藏  举报