1. 程式人生 > >二叉樹中和為某一值的所有路徑

二叉樹中和為某一值的所有路徑

說明 util ray 如果 tree 二叉樹 節點 integer fin

輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。

import java.util.ArrayList;
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
import java.util.ArrayList;
import java.util.Stack;
public class Solution { public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) { ArrayList<ArrayList<Integer>> pathList = new ArrayList<ArrayList<Integer>>(); if(root==null) return pathList; Stack
<Integer> stack=new Stack<Integer>(); FindPath(root,target,stack,pathList); return pathList; } private void FindPath(TreeNode root, int target, Stack<Integer> path, ArrayList<ArrayList<Integer>> pathList) {
if(root==null) return; //如果是葉子節點 if(root.left==null&&root.right==null){ if(root.val==target){//如果葉子節點上的值正好等於target的值 ArrayList<Integer> list=new ArrayList<Integer>(); for(int i:path){ list.add(new Integer(i)); } list.add(new Integer(root.val)); pathList.add(list); } } else{//如果不是葉子節點繼續往下叠代,一直叠代到葉子節點。 path.push(new Integer(root.val)); FindPath(root.left, target-root.val, path, pathList); FindPath(root.right, target-root.val, path, pathList); //如果走到這裏說明走到左右子節點都不滿足,所以需要向上移動一個節點 //所以使用path.pop() path.pop(); } } }

二叉樹中和為某一值的所有路徑