剑指Offer:面试题25——二叉树中和为某一值的路径(java实现)
来源:互联网 发布:淘宝店铺改名字和头像 编辑:程序博客网 时间:2024/06/05 09:01
问题描述:
输入一棵二叉树和一个整数,打印出二叉树中结点指的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树结点的定义如下:
public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}
思路:利用前序遍历二叉树,并借助一个栈来存储根到叶子节点的路径,对每个节点,先检查当前节点是否是叶子节点,若是则打印路径。否则看它的左子树是否为空,不为空则递归的检查,此时新的和值应该加上当前节点的值。同样的右子树也是一样。
代码如下:未经过验证。
public class FindPath { void findPath(TreeNode root, int expectedSum){ if(root == null){ return; } Stack<Integer> path = new Stack<Integer>(); int currentSum = 0; findPath(root, expectedSum, path, currentSum); } void findPath(TreeNode root, int eS, Stack<Integer> path, int cS){ cS += root.data; path.push(root.data); boolean isLeaf = (root.left == null && root.right == null); //若当前结点不是叶子结点,且当前路径中的和为所给和值,则打印出该路径 if(cS == eS && isLeaf){ for(int i = 0; i < path.size(); i++){ System.out.print(path.get(i)+" "); } System.out.println(); } //若左子树不为空,则递归查找 if(root.left != null){ findPath(root.left, eS, path, cS); } //若右子树不为空,则递归查找 if(root.right != null){ findPath(root.right, eS, path, cS); } //在返回父结点之前,在路径上删除当前结点 path.pop(); }}class TreeNode{ int data; TreeNode left; TreeNode right; public TreeNode(int x){ data = x; left = null; right = null; }}
0 0
- 剑指offer--面试题25:二叉树中和为某一值的路径--Java实现
- 剑指offer 面试题25 二叉树中和为某一值的路径-Java实现
- 剑指Offer:面试题25——二叉树中和为某一值的路径(java实现)
- 剑指offer——面试题25:二叉树中和为某一值的路径
- 剑指offer 面试题25—二叉树中和为某一值的路径
- 剑指Offer面试题25(Java版):二叉树中和为某一值的路径
- 剑指Offer面试题25(Java版):二叉树中和为某一值的路径
- 剑指offer代码解析——面试题25二叉树中和为某一值的路径
- 剑指offer代码解析——面试题25二叉树中和为某一值的路径
- 【剑指offer】面试题25:二叉树中和为某一值的路径
- 剑指Offer:面试题25 二叉树中和为某一值的路径
- 剑指offer 面试题25 求二叉树中和为某一路径的值
- 《剑指Offer》面试题25:二叉树中和为某一值的路径
- 【剑指Offer学习】【面试题25:二叉树中和为某一值的路径】
- 剑指offer面试题25-二叉树中和为某一值的路径
- 剑指offer-面试题25:二叉树中和为某一值的路径
- 剑指offer之面试题25:二叉树中和为某一值的路径
- 剑指Offer----面试题25:二叉树中和为某一值的路径
- 03-二次准则函数及其求解(一般情况下的判别函数)
- Java公司面试题集锦(三)
- MySql 存储过程
- 安装hadoop和hive时候遇到的问题及解决方法
- PNG格式小图标的CSS任意颜色赋色技术
- 剑指Offer:面试题25——二叉树中和为某一值的路径(java实现)
- iOS 导航控制器(代码方式)
- UDP Socket编程
- oracle表空间表分区详解及oracle表分区查询使用方法
- hive权限管理
- C++类初始化列表与构造函数内赋值区别
- yum 升级centos6.5内核
- 通过案例理解Abstract类和interface类
- HTML5摇一摇以及音频播放问题优化总结