解题思路:先判断当前节点是否为空,不为空则加入路径中,若不为空,判断该节点是否为叶子节点,为叶子节点则将路径加入答案,否则继续递归左右子树.
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
输入:
1
/ \
2 3
\
5输出: ["1->2->5", "1->3"]
解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
class Solution {
public List<String> binaryTreePaths(TreeNode root) {
LinkedList<String> paths = new LinkedList<>();
paths_ans(root,"",paths);
return paths;
}
public void paths_ans(TreeNode root,String path,LinkedList<String> paths){
if(root != null){
path += Integer.toString(root.val);
if(root.left == null && root.right == null){
paths.add(path);
}else{
path += "->";
paths_ans(root.left,path,paths);
paths_ans(root.right,path,paths);
}
}
}
}
解题思路:首先要找到两个定点,分别是右下角和左上角的点,然后以这两点的坐标为终止条件输出每一圈的元素,终止条件是这两点的对应的横纵坐标.
问题描述
对于一个 n 行 m 列的表格,我们可以使用螺旋的方式给表格依次填上正整数,我们称填好的表格为一个螺旋矩阵。
例如,一个 4 行 5 列的螺旋矩阵如下:
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8样例输入
4 5
2 2样例输出
15
package Test02;
import java.util.Scanner;
public class Work {
public static void main(String[] args) {
int[][] a = new int[1001][1001];
int n,m;
int c,r;
Scanner reader = new Scanner(System.in);
n = reader.nextInt();
m = reader.nextInt();
c = reader.nextInt();
r = reader.nextInt();
int row = 1, col = 1;
int num = 1;
int n2 = n, m2 = m;
while(row <= n && col <= m){
int x = row, y = col;
while(col <= m)
a[row][col++] = num++;
col--;row++;
while(row <= n)
a[row++][col] = num++;
row--;col--;
while(col >= y)
a[row][col--] = num++;
row--;col++;
while(row > x )
a[row--][col] = num++;
row++;col++;
n--;m--;
}
System.out.println(a[r][c]);
}
}