遇到二叉树遍历不要慌leetcode 257 二叉树所有路径

tech2024-10-13  26

leetcode 257 二叉树所有路径

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

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

示例:

输入:

1 / 2 3 5

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

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

这道题是目前比较火的一道面试题,算是校招必刷题目,看见二叉树遍历不要慌多数递归的方法都可以解决。 在我刚看见这道题的时候二叉树所有路径遍历第一时间想到的肯定是深度搜索,一条路走到低然后将这条路上经过的节点存放起来然后再开始下一条,这个时候就有一个问题当你一条路走完的时候怎么能够返回到之前经过的这个节点呢,也就是回溯,但是这道题并没有必要用到回溯利用递归完全就可以解决,话不多说上代码。

class Solution { public List<String> binaryTreePaths(TreeNode root) { //创建空数组 List<String> res = new ArrayList<String>(); binaryTreePathss(root,res,""); return res; } public void binaryTreePathss(TreeNode root,List<String> res,String str) { //如有空树直接返回 if(root == null){ return; } //为符合题意当是头节点的时候不需要加->符号 if (!str.equals("")){ str = str + "->"; } str = str + Integer.toString(root.val); //判断一下是否是叶子节点如果遍历到了叶子节点就将字符串加入res集合中 if(root.left == null && root.right==null){ res.add(str); } //判断一下左子树和右子树是否为空如不为空则进入递归但是有个地方需要注意一下进入递归的字符串一定要是new出来的否则,你一直都是再用一个字符串进行添加肯定会错,这个就相当于你每走一步都会出现一个全新的字符串可以这样理解 if(root.left!=null){ String strt = new String(str); binaryTreePathss(root.left,res,strt); } if(root.right!=null){ String strt = new String(str); binaryTreePathss(root.right,res,strt); } } }

这道题其实并不少很难,只要记住看见二叉树遍历的问题首先就是想递归,层序遍历首先要想用栈或者队列,后续会给大家分享二叉树的前中后,和层序遍历。

最新回复(0)