题目
解题思路
迭代法实现所有路径的,迭代法采用BFS的方式,使用的数据结构:
- String类型的数组列表,用来存储最后的结果。
- Object(可以改变的存储的数据的数据类型)类型的stack栈
主要思路: - 判断根结点是否为null,如果为null,直接返回res数组(此时列表为空)
- 当根结点不为null,将根节点的节点和节点值全部推入栈
- 当栈中不为空时,首先弹出栈尾元素的节点和到达该节点的路径信息。
- 判断是否到达叶子节点,如果到达叶子节点,则将该点作为路径的终点(不加“->”)加入到路径path中,同时将此时的最终路径添加到res路径数组中去。
- 如果没有到达叶子节点,且该点存在右节点,将右节点推入栈,同时将该点的值作为中途路径的路径(加“->”)添加到路径path中
- 左叶子节点的操作同上。
- 最后在循环外返回res的String类型的数组list。
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
// 采用迭代法进行实现
class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> res = new ArrayList<>();
if (root == null) {
return res;
}
// 使用Object范型可以使得栈存储多种类型的数据结构
Stack<Object> stack =new Stack<>();
// 节点和路径同时入栈
stack.push(root);
stack.push(root.val + "");
// 使用BFS实现路径的
while (!stack.isEmpty()) {
String path = (String) stack.pop();
TreeNode node = (TreeNode) stack.pop();
// 如果找到叶子节点
if (node.left == null && node.right == null) {
res.add(path);
}
// 节点的右子节点不为空
if (node.right != null) {
stack.push(node.right);
stack.push(path + "->" + node.right.val);
}
if (node.left != null) {
stack.push(node.left);
stack.push(path + "->" + node.left.val);
}
}
return res;
}
}