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

原创 2016年06月01日 11:16:20
题目:输入一棵二叉树和一个整数, 打印出二叉树中结点值的和为输入整数的所有路径。

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

原来根据大神的思路以为要使用栈,其实不是,是使用的类似于栈的数组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);
	 }
}

递归是参数的递归
版权声明:本文为博主原创文章,未经博主允许不得转载。

【剑指offer】二叉树中和为某一值的路径

题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 输入: 每个测试案例包括n+1行: 第一行为2...
  • mmc_maodun
  • mmc_maodun
  • 2014年05月19日 08:18
  • 4152

剑指offer_输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径

二叉树中和为某一值的路径 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。...
  • lingongheng
  • lingongheng
  • 2016年10月04日 15:46
  • 2562

《剑指Offer》面试题:打印出二叉树中结点值的和为输入整数的所有路径

题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路 用前序遍历来实现 /* 测试函数编写...
  • u010412719
  • u010412719
  • 2015年10月08日 19:38
  • 1173

从上往下打印二叉树 (剑指Offer 第 21 题)

题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印。解题思路:题目实际上就是二叉树的层序遍历,如上图,我们借助队列来存储节点来实现层序遍历的效果,具体操作: 1. 先将根节点入队列 2...
  • Fran_Lee
  • Fran_Lee
  • 2017年11月18日 16:17
  • 55

剑指Offer系列---(21)二叉树的镜像

1.题目描述: 请完成一个函数,输入一个二叉树,该函数输出它的镜像。二叉树结点的定义如下: struct BinaryTreeNode {     int              m_n...
  • SkewRain
  • SkewRain
  • 2015年09月15日 21:08
  • 337

剑指offer23--路径所用值之和

使用栈和递归的方式来打印二叉树的所用从根节点到叶子结点元素之和为某个数的...
  • jinhuoxingkong
  • jinhuoxingkong
  • 2016年06月05日 10:44
  • 526

剑指Offer 面试题34:二叉树中和为某一值的路径 Java代码实现

题目:输入一棵二叉树和整数,打印出二叉树中节点值得和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。 解题思路:路径从根节点开始,应该用类似于前序遍历的方式访问树节点...
  • hh_zheng
  • hh_zheng
  • 2018年01月11日 21:09
  • 9

剑指offer-面试题25:二叉树中和为某一值的路径

题目输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树的定义如下:class TreeNode { int...
  • Decorator2015
  • Decorator2015
  • 2016年06月20日 16:01
  • 289

【剑指Offer】面试题25:二叉树中和为某一值的路径

整理自剑指Offer
  • u010059070
  • u010059070
  • 2017年07月20日 16:10
  • 135

【剑指offer】4.3举例让抽象问题具体化——面试题25:二叉树中和为某一值的路径

//题目描述 // //输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 #include #includ...
  • YYlxid
  • YYlxid
  • 2016年01月11日 20:43
  • 247
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:剑指offer21--二叉树路径之和为整数
举报原因:
原因补充:

(最多只允许输入30个字)