Java数据结构之257二叉树的所有路径
二叉树的所有路径
给定一个二叉树,返回所有从根节点到叶子节点的路径。
算法分析:
- 假设起始节点为1;先搜索1节点的右子节点为2,此时将1节点置为已搜索状态;判断2节点是否为已搜索状态,若未搜索,则将2节点置为已搜索状态;每次都优先搜索判断右侧邻接节点;
- 如图所示,若此时已搜索至2节点,发现右子节点为
null
;故递归至上一个节点2搜索左子节点5,继续搜索判断5节点无左右子节点,故递归返回至1节点; - 此时搜索判断1节点的左侧邻接节点3不为已搜索状态,故继续进行先右侧后左侧邻接节点搜索判断操作;
- 直至最后一个节点3不存在左右子节点,故递归至最初的1节点;判断结束,搜索结束。
有关于具体的树类结构的DFS算法分析见:https://www.cnblogs.com/njuptzheng/p/13329974.html
代码实现:
class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> paths = new ArrayList<String>();
String path = "";
sreachPaths(root,paths,path);
return paths;
}
public void sreachPaths(TreeNode root, List<String> paths, String path) {
if(root != null) {
path += Integer.toString(root.val);
if(root.left == null && root.right == null) {
paths.add(path);
}else {
path += "->";
sreachPaths(root.left, paths, path);
sreachPaths(root.right, paths, path);
}
}
}
}
执行结果