您的位置:首页 > Web前端

剑指offer(26):二叉树中和为某一值的路径

2016-04-26 18:20 399 查看
题目描述

输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

分析

前序遍历的方式访问二叉树,将访问的节点添加到路径上,则对应的target需要减去添加的节点root的值。如果target等于0,且当前节点为叶子节点,则找到一条路径。否则递归访问和添加root的左右节点。如果没有找到路径,则删除路径中最后一个节点(刚刚添加的root节点),返回到父节点,遍历下一条路径。

牛客AC代码:

import java.util.ArrayList;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;

public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
private ArrayList<ArrayList<Integer>> allPaths = new ArrayList<ArrayList<Integer>>(); // 所有路径
private ArrayList<Integer> path = new ArrayList<Integer>(); // 单条路径

public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) {
if (root == null)
return allPaths;

// 添加值后 target 减去该节点值
path.add(root.val);
target -= root.val;

// target等于0,且当前节点为叶子节点,则找到一条路径
if (target == 0 && root.left == null && root.right == null)
allPaths.add(new ArrayList<Integer>(path));

// 递归遍历左右子节点
FindPath(root.left, target);
FindPath(root.right, target);

// 如果没有找到路径,则删除最后一个节点,返回到父节点,遍历下一条路径
path.remove(path.size() - 1);

return allPaths;
}
}


参考

1. 何海涛,剑指offer名企面试官精讲典型编程题(纪念版),电子工业出版社
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: