剑指offer-面试题25-二叉树中和为某一值的路径
来源:互联网 发布:执行偏差算法 is 编辑:程序博客网 时间:2024/05/21 06:50
二叉树节点定义:
package case25_FindPathInTree;/** * 二叉树节点结构 * @author WangSai * */public class MyNode {int data;MyNode lchild;MyNode rchild;public MyNode() {}public MyNode(int data) {this.data = data;}}
代码实现:
package case25_FindPathInTree;/** * 题目:题目:输入一棵二叉树和一个整数, 打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 */import java.util.ArrayList;public class FindMyPath {private void findThePath(MyNode root, int expectedSum) {// 异常值检测if (root == null)throw new IllegalArgumentException("非法参数");ArrayList<Integer> mylist = new ArrayList<>();// 递归实现当前节点和上一个节点求和,并且记录当前节点到容器中findThePathCore(root, 0, expectedSum, mylist);}/** * * @param root,二叉树根节点 * @param currentSum,当前记录的和(还未加上当前结点的值) * @param expectedSum,期望的和 * @param mylist,根结点到当前处理结点的所经过的结点,(还未包括当前结点) */private void findThePathCore(MyNode root, int currentSum, int expectedSum, ArrayList<Integer> mylist) {// 当前节点不为空的情况下,做处理// 求当前节点的值root.data,加上根节点到上一个节点路径上所有节点的值得和// 把当前节点放入容器mylist中// 判断目前为止求得的currentsum的值// 若 < expectedSum,则继续递归左右子节点// 若 == expectedSum,判断是否==expectedSum,如果当前节点是子节点,则打印路径// 执行到这一步说明,打印完成或者当前路径不满足条件,则应该删除最后一个进入容器的元素。if (root == null)return;currentSum += root.data;mylist.add(root.data);if (currentSum < expectedSum) {findThePathCore(root.lchild, currentSum, expectedSum, mylist);findThePathCore(root.rchild, currentSum, expectedSum, mylist);} else if (currentSum == expectedSum) {if (root.lchild == null && root.rchild == null)System.out.println(mylist.toString());}// 删除最后进入容器的元素mylist.remove(mylist.size() - 1);}public static void main(String[] args) {test1();test2();test3();test4();}// 普通二叉树,有满足条件的值// 1// / \// 2 3private static void test1() {FindMyPath fmp = new FindMyPath();MyNode N1 = new MyNode(1);MyNode N2 = new MyNode(2);MyNode N3 = new MyNode(3);N1.lchild = N2;N1.rchild = N3;System.out.println("普通二叉树,有满足条件的值:");fmp.findThePath(N1, 3);}// 普通二叉树,没有满足条件的值private static void test2() {FindMyPath fmp = new FindMyPath();MyNode N1 = new MyNode(1);MyNode N2 = new MyNode(2);MyNode N3 = new MyNode(3);N1.lchild = N2;N1.rchild = N3;System.out.println("普通二叉树,没有 满足条件的值:");fmp.findThePath(N1, 10);}// 只有一个节点的二叉树, 有 满足条件的值private static void test3() {FindMyPath fmp = new FindMyPath();MyNode N1 = new MyNode(1);System.out.println("只有一个节点的二叉树, 有 满足条件的值:");fmp.findThePath(N1, 1);}// 只有一个节点的二叉树, 没有 满足条件的值private static void test4() {FindMyPath fmp = new FindMyPath();MyNode N1 = new MyNode(1);System.out.println("只有一个节点的二叉树, 没有 满足条件的值:");fmp.findThePath(N1, 10);}}
0 0
- 【剑指offer】面试题25:二叉树中和为某一值的路径
- 剑指Offer:面试题25 二叉树中和为某一值的路径
- 剑指offer 面试题25 求二叉树中和为某一路径的值
- 《剑指Offer》面试题25:二叉树中和为某一值的路径
- 剑指offer 面试题25—二叉树中和为某一值的路径
- 剑指offer--面试题25:二叉树中和为某一值的路径--Java实现
- 【剑指Offer学习】【面试题25:二叉树中和为某一值的路径】
- 剑指Offer面试题25(Java版):二叉树中和为某一值的路径
- 剑指offer面试题25-二叉树中和为某一值的路径
- 剑指offer-面试题25:二叉树中和为某一值的路径
- 剑指offer之面试题25:二叉树中和为某一值的路径
- 剑指Offer----面试题25:二叉树中和为某一值的路径
- 剑指offer-面试题25:二叉树中和为某一值的路径
- 剑指offer面试题25:二叉树中和为某一值的路径
- 【剑指offer】面试题25:二叉树中和为某一值的路径
- 剑指offer--面试题25: 二叉树中和为某一值的路径
- 剑指Offer面试题25(Java版):二叉树中和为某一值的路径
- 剑指offer——面试题25:二叉树中和为某一值的路径
- Install and run Android in Androidx86 emulator
- Asking The Right Questions -- Note Two: Find reasons and clarify ambiguities
- 三、myBatis的配置(xml)文件报一些莫名其妙的错
- android 编译类型eng/user/userdebug区别
- C#Winform 将DataGridView中的数据导入到Excel中
- 剑指offer-面试题25-二叉树中和为某一值的路径
- WIN10 QWT6.1.3+VS2015编译
- this 和context和 getApplictionContext的区别
- matlab单帧频谱16个高斯混合拟合
- [面试必看]Java集合类学习整理
- 第三十九将项目五 反序数
- js的DOM对象与Jquery对象的区别和转换方法总结
- 整理本地多次commit
- Fecth 跨域问题