劍指offer之 二叉樹中和為某一值的路徑
阿新 • • 發佈:2019-01-29
題目:輸入一棵二叉樹和一個整數, 打印出二叉樹中結點值的和為輸入整數的所有路徑。從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。
import java.util.ArrayList;
public class FindPath {
ArrayList<Integer> path = new ArrayList<>();
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
public ArrayList<ArrayList<Integer>> findPath (TreeNode root,int target) {
if (root==null){
return list;
}
path.add(root.val);
target = target- root.val;
if(target==0 && root.left==null && root.right == null){
list.add(new ArrayList<Integer>(path));
}
findPath(root.left, target);
findPath(root.right, target);
path.remove(path.size()-1 );
return list;
}
public static void main(String[] args) {
TreeNode a = new TreeNode(0);
TreeNode b = new TreeNode(1);
TreeNode c = new TreeNode(2);
TreeNode d = new TreeNode(3);
TreeNode e = new TreeNode(4);
TreeNode f = new TreeNode(5 );
TreeNode g = new TreeNode(6);
a.left=b;
a.right=c;
b.left=d;
b.right=e;
c.left=f;
c.right=g;
FindPath find = new FindPath();
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
list = find.findPath(a, 7);
for( ArrayList<Integer> path:list ){
for(Integer item: path){
System.out.print(item +" ");
}
System.out.println();
}
}
}
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
列印二叉樹的路徑
import java.util.ArrayList;
public class FindPath1 {
ArrayList<Integer> path = new ArrayList<>();
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
public ArrayList<ArrayList<Integer>> findPath(TreeNode root) {
if (root==null){
return list;
}
path.add(root.val);
if(root.left==null && root.right == null){
list.add(new ArrayList<Integer>(path));
}
findPath(root.left);
findPath(root.right);
path.remove(path.size()-1);
return list;
}
public static void main(String[] args) {
TreeNode a = new TreeNode(0);
TreeNode b = new TreeNode(1);
TreeNode c = new TreeNode(2);
TreeNode d = new TreeNode(3);
TreeNode e = new TreeNode(4);
TreeNode f = new TreeNode(5);
TreeNode g = new TreeNode(6);
a.left=b;
a.right=c;
b.left=d;
b.right=e;
c.left=f;
c.right=g;
FindPath1 find = new FindPath1();
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
list = find.findPath(a);
for( ArrayList<Integer> path:list ){
for(Integer item: path){
System.out.print(item +" ");
}
System.out.println();
}
}
}
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}