回溯法 解决二叉树中找一条和为固定数值的路径(java)
来源:互联网 发布:淘宝网信鸽鸽具用品 编辑:程序博客网 时间:2024/06/05 16:23
问题描述
其中路径指的是从跟节点到叶子节点经过的路径
代码
package com.yuzhiyun;import java.util.ArrayList;import java.util.List;public class FindPathInBinaryTree { /** * 二叉树的树结点 */ public static class BinaryTreeNode { int value; BinaryTreeNode left; BinaryTreeNode right; } /** * 输入一棵二叉树和一个整数, 打印出二叉树中结点值的和为输入整数的所有路径。 从树的根结点开始往下一直到叶销点所经过的结点形成一条路径。 * * @param root * 树的根结点 * @param expectedSum * 要求的路径和 */ public static void findPath(BinaryTreeNode root, int expectedSum) { // 创建一个链表,用于存放根结点到当前处理结点的所经过的结点 List<Integer> list = new ArrayList<>(); // 如果根结点不为空,就调用辅助处理方法 if (root != null) { findPath(root, 0, expectedSum, list); } } /** * @param root * 当前要处理的结点 * @param curSum * 当前记录的和(还未加上当前结点的值) * @param expectedSum * 要求的路径和 * @param result * 根结点到当前处理结点的所经过的结点,(还未包括当前结点) */ public static void findPath(BinaryTreeNode root, int curSum, int expectedSum, List<Integer> result) { // 如果结点不为空就进行处理 if (root != null) { // 加上当前结点的值 curSum += root.value; // 将当前结点入队 result.add(root.value); // 如果当前结点的值小于期望的和 if (curSum < expectedSum) { // 递归处理左子树 findPath(root.left, curSum, expectedSum, result); // 递归处理右子树 findPath(root.right, curSum, expectedSum, result); } // 如果当前和与期望的和相等 else if (curSum == expectedSum) { // 当前结点是叶结点,则输出结果 if (root.left == null && root.right == null) { System.out.println(result); } } // 移除当前结点,向上回溯 result.remove(result.size() - 1); } } public static void main(String[] args) { // TODO Auto-generated method stub // 10 // / \ // 5 12 // /\ // 4 7 BinaryTreeNode root = new BinaryTreeNode(); root.value = 10; root.left = new BinaryTreeNode(); root.left.value = 5; root.left.left = new BinaryTreeNode(); root.left.left.value = 4; root.left.right = new BinaryTreeNode(); root.left.right.value = 7; root.right = new BinaryTreeNode(); root.right.value = 12; // 有两条路径上的结点和为22 System.out.println("findPath(root, 22);"); findPath(root, 22); // 没有路径上的结点和为15 System.out.println("findPath(root, 15);"); findPath(root, 15); // 有一条路径上的结点和为19 System.out.println("findPath(root, 19);"); findPath(root, 19); }}
运行结果
findPath(root, 22);[10, 5, 7][10, 12]findPath(root, 15);findPath(root, 19);[10, 5, 4]
阅读全文
0 0
- 回溯法 解决二叉树中找一条和为固定数值的路径(java)
- 二叉树中找一条和最大的路径
- 回溯法-求二叉树中路径和为某一定值所有路径
- 二叉树的路径和为给定数值的所有路径
- 【练习】在二叉树中找出和为某个值的一条路径
- java 将数值转化为固定长度的字符串
- java 将数值转化为固定长度的字符串
- 回溯法-数组中和为固定值的组合
- java之二叉树和为某一值的路径
- 二叉树的每个节点为0-9的一个数字,根到叶子的一条路径拼成一个数,求所有路径形成的数字和
- 判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。(回溯法)
- java 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
- 二叉树路径的查找(和为某一值)
- 【回溯】二叉树求和的所有路径
- 迷宫问题一 找到迷宫的一条路径(DFS+回溯)
- 剑指offer面试题25二叉树中和为某一个固定值的路径
- 两个数组求和为一个固定数值的所有组合java实现
- 给定一棵二叉树,和一个数值。求二叉树的路径和等于给定值的所有路径
- 2017 Multi-University Training Contest
- Centos 6.5 下GBrowse 2.0安装(详细版)
- 软件测试工具
- RxAndroid菜鸟必入
- PHP ---- var_dump(),echo,print_r()的区别
- 回溯法 解决二叉树中找一条和为固定数值的路径(java)
- 设计模式介绍之二:单例模式(Singleton)
- JPA-EntityManager
- Spring Boot 揭秘与实战(二) 数据存储篇
- 【系统学习SpringBoot】springBoot 入门篇
- js中判断客户端有无安装Adobe 并指引用户安装
- Python-22 文件系统:os模块
- 【干货合集】阿里云专家诠释持续集成与云端交付的正确姿势
- 设计模式-原型模式-prototype-python