1. 程式人生 > >劍指offer第24題(二叉樹中和為某一值的路徑)

劍指offer第24題(二叉樹中和為某一值的路徑)

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

思想:由於本題中的根要在前面,因而我們首先想到的是前序遍歷。當用前序遍歷的方式訪問某一節點時,我們把該節點新增到路徑上,並累加該節點的值。如果該節點是葉節點並且路徑中的節點值的和剛好為輸入的整數,則就把此路徑打印出來。否則繼續遍歷葉節點。當前節點的訪問結束後,要回到他的父節點,因此在函式退出之前要在路徑上刪除當前節點並且減去當前節點的值,以確保回退時剛好是根節點到父節點的路徑。

java程式碼:

import java.util.ArrayList;
/**
public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public ArrayList<ArrayList<Integer>> listAll= new ArrayList<ArrayList<Integer>>(); public ArrayList<Integer> list
=new ArrayList<Integer>(); public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) { if(root==null){ return listAll; } list.add(root.val); target-=root.val; if(target==0 && root.left==null && root.right==null
){ listAll.add(new ArrayList<Integer>(list)); } FindPath(root.left,target); FindPath(root.right,target); list.remove(list.size()-1); return listAll; } }