1. 程式人生 > >二叉樹中和為某一值的路徑(Java實現)

二叉樹中和為某一值的路徑(Java實現)

該題為劍指offer面試題25.

牛客網測試地址為:https://www.nowcoder.com/questionTerminal/b736e784e3e34731af99065031301bca

[程式設計題]二叉樹中和為某一值的路徑
  • 參與人次:74300次時間限制:1秒空間限制:32768K
輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。
package go.jacob.day427;

import java.util.ArrayList;

public class Demo2 {

	/*
	 * 
	 */
	ArrayList<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();
	ArrayList<Integer> list = new ArrayList<Integer>();

	public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) {
		//如果根節點為空,直接返回
		if (root == null)
			return lists;
		target -= root.val;
		list.add(root.val);
		//因為路徑是從根節點開始到葉子結點結束,所以必須有後面兩個判斷條件
		if (target == 0 && root.left == null && root.right == null) 
			//注意:這裡不能用 lists.add(list);
			lists.add(new ArrayList<Integer>(list));

		FindPath(root.left, target);
		FindPath(root.right,target);
		//函式返回上一層,把改成的節點刪除。
		list.remove(list.size()-1);
		
		//會返回給呼叫它的函式。所以只有main函式呼叫的FinfPath()會直接返回給主函式
		return lists;
		
	}
	//樹節點類
	class TreeNode {
		int val = 0;
		TreeNode left = null;
		TreeNode right = null;

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

		}

	}
}