二叉树中和为某一值得路径

package java_study.JianZhiOffer;

import org.junit.Test;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * Created by ethan on 2015/6/29.
 * java没有指针 CurSum 这个解决方法很ugly
 */
public class No25二叉树中和为某一值得路径 {
    // 只考虑正数的情况
    // 这里所指的路径是指从root到叶结点
    public void findPath(TreeNode root, LinkedList<Character> list, int goal, CurSum cur_sum){
        if (goal<cur_sum.cur_sum) return;
        if (root==null) return;
        if (list==null) list = new LinkedList<Character>();

        cur_sum.cur_sum += root.getValue()-'0';
        list.add(root.getValue());

        if (root.getLchild()==null&&root.getRchild()==null&&goal==cur_sum.cur_sum){
            for (int i=0; i<list.size(); i++){
                System.out.print(list.get(i)+ " ");
            }
            System.out.println();
        }
        if (root.getLchild()!=null)
            findPath(root.getLchild(), list, goal, cur_sum);
        if (root.getRchild()!=null)
            findPath(root.getRchild(), list, goal, cur_sum);
        // 这里出栈
        list.removeLast();
        cur_sum.cur_sum -= root.getValue()-'0';
    }

    @Test
    public void test1(){
        String pre_str = "4213657";
        String in_str = "1234567";
        TreeNode root = TreeUtil.buildTree(pre_str, in_str);
        findPath(root, null, 7, new CurSum(0));
    }
    public class CurSum{
        int cur_sum;
        public CurSum(int i){
            cur_sum=i;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值