剑指offer(26):二叉树中和为某一值的路径
2016-04-26 18:20
399 查看
题目描述
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
分析
前序遍历的方式访问二叉树,将访问的节点添加到路径上,则对应的target需要减去添加的节点root的值。如果target等于0,且当前节点为叶子节点,则找到一条路径。否则递归访问和添加root的左右节点。如果没有找到路径,则删除路径中最后一个节点(刚刚添加的root节点),返回到父节点,遍历下一条路径。
牛客AC代码:
参考
1. 何海涛,剑指offer名企面试官精讲典型编程题(纪念版),电子工业出版社
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
分析
前序遍历的方式访问二叉树,将访问的节点添加到路径上,则对应的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名企面试官精讲典型编程题(纪念版),电子工业出版社
相关文章推荐
- JavaScript 进阶学习 2 数组
- 使用highchart无数据时的样式
- JavaScript 进阶学习 1
- js window resize延时
- 任意角度的矩形与圆形的碰撞检测
- JS 正则表达式初体验
- HTML DOM display 属性
- poj 1037 A decorative fence dp+序列构造
- js清除浏览器缓存的几种方法
- Node.js 读写文件
- Jsduck
- js 实现自动调出键盘
- Css 梯形图形 并添加文字
- HTML5 Audio/Video 标签,属性,方法,事件汇总 (转)
- 前端工程师的mysql笔记(一)
- 增删改查前端部分
- 使用JavaScript实现数组去重的几种方式
- 前端JS对后台传递的timestamp的转换
- ButterKnife 使用教程
- React addons.update setState 链式更新object属性