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;
}
}
}
二叉树中和为某一值得路径
最新推荐文章于 2022-10-08 13:39:55 发布