剑指offer21--二叉树路径之和为整数

来源:互联网 发布:430单片机视频教程 编辑:程序博客网 时间:2024/06/17 02:40
题目:输入一棵二叉树和一个整数, 打印出二叉树中结点值的和为输入整数的所有路径。

从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

原来根据大神的思路以为要使用栈,其实不是,是使用的类似于栈的数组List,当使用到递归的时候就需要考虑到递归传递的参数是那几个,只有这样才可以实现正常的递归操作。

package 剑指offer;/*题目:输入一棵二叉树和一个整数, 打印出二叉树中结点值的和为输入整数的所有路径。 * 从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。*/import java.util.*;public class Test25 {public static class BinaryTree2Node {    int value;    BinaryTree2Node left;    BinaryTree2Node right;}public static void findPath(BinaryTree2Node node, int expectNum){List<Integer> list = new ArrayList<>();if(node != null){findPath(node, 0, expectNum, list);}}// 思考为什么要递归四个参数,少一个行不行public static void findPath(BinaryTree2Node root, int curNum, int expectNum, List<Integer> result){if(root != null){curNum += root.value;result.add(root.value);if(curNum < expectNum){// 递归左子树和右子树findPath(root.left, curNum, expectNum, result);findPath(root.right, curNum, expectNum, result);}else if(curNum == expectNum){                if (root.left == null && root.right == null) {                    System.out.println(result);                }}result.remove(result.size() - 1);}} public static void main(String[] args) {        //            10        //         /      \        //        5        12        //       /\        //      4  7        BinaryTree2Node root = new BinaryTree2Node();        root.value = 10;        root.left = new BinaryTree2Node();        root.left.value = 5;        root.left.left = new BinaryTree2Node();        root.left.left.value = 4;        root.left.right = new BinaryTree2Node();        root.left.right.value = 7;        root.right = new BinaryTree2Node();        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); }}

递归是参数的递归

1 0
原创粉丝点击