提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、背景介绍
给定一个二叉树,返回所有从根节点到叶子节点的路径。
输入:
1
/ \
2 3
\
5
输出: ["1->2->5", "1->3"]
解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
二、解题步骤
解题思路:
我们可以逆向推理,如果该二叉树有N个叶子节点,是不是意味着要做N次路径拼接添加操作。
单次的路径拼接操作,由叶子节点的值和父节点的路径组成,父节点的路径又由它的父节点的路径组成。也就是说我们从根节点出发,分别朝左子树和右子树遍历,只要当前节点不是叶子节点,那么就将当前节点的信息放入父节点的路径,直到遇到叶子节点,然后完成最后的组装。
这个题很适合用递归的思路解答。
代码示例:
@Test
public void test(TreeNode root) {
List<String> answer = new ArrayList<>();
searchBT(root, "", answer);
System.out.println(JSON.toJSONString(answer));
}
private void searchBT(TreeNode root, String path, List<String> answer) {
if (root.left == null && root.right == null) {
answer.add(path + root.val);
}
if (root.left != null) {
searchBT(root.left, path + root.val + "->", answer);
}
if (root.right != null) {
searchBT(root.right, path + root.val + "->", answer);
}
}
path + root.val + "->" 父节点路径拼接
path + root.val 叶子节点全路径组装
这是两个关键点。
总结
每天进步一点点!