尋找最短的二叉樹搜索路徑,從根到葉節(jié)點(diǎn)

public class TreeNode {
    int val=0;
    TreeNode left=null;
    TreeNode right=null;

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


//尋找最短的 二叉樹搜索路徑
public class Solution2 {
    private ArrayList<ArrayList<Integer>> allPaths=new ArrayList<ArrayList<Integer>>();
    private ArrayList<Integer> onePath=new ArrayList<Integer>();

    public ArrayList<ArrayList<Integer>> findAllPath(TreeNode root) {
        if(root==null)
            return allPaths;
        onePath.add(root.val);
        //若為葉子節(jié)點(diǎn),則onePath加入到allPaths;
        if(root.left==null&&root.right==null){
             allPaths.add(new ArrayList<Integer>(onePath));
        }
        findAllPath(root.left);
        findAllPath(root.right);
        onePath.remove(onePath.size()-1);
        return allPaths;
    }
}

/**

  • 劍指Offer面試題34:二叉樹中和為某一個(gè)值的路徑
  • 題目:輸入一顆二叉樹和一個(gè)整數(shù),打印出二叉樹中結(jié)點(diǎn)值的和為輸入整數(shù)的所有路徑。
  • 路徑定義為從樹的根結(jié)點(diǎn)開始往下一直到葉結(jié)點(diǎn)所經(jīng)過的結(jié)點(diǎn)形成一條路徑。
  • 思路:參考劍指Offer
    1、當(dāng)用前序遍歷的方式訪問到某一個(gè)節(jié)點(diǎn)時(shí),我們把該節(jié)點(diǎn)添加到路徑上,并累加該節(jié)點(diǎn)的值。
    2、如果該節(jié)點(diǎn)為葉節(jié)點(diǎn),并且路徑中節(jié)點(diǎn)值的和剛好等于輸入的整數(shù),則當(dāng)前路徑符合要求。
    3、如果當(dāng)前節(jié)點(diǎn)不是葉節(jié)點(diǎn),則繼續(xù)訪問它的子節(jié)點(diǎn)。
    4、當(dāng)前節(jié)點(diǎn)訪問結(jié)束后,遞歸函數(shù)將自動(dòng)回到它的父節(jié)點(diǎn)。所以,在函數(shù)退出之前要在路徑上刪除當(dāng)前節(jié)點(diǎn)并減去當(dāng)前節(jié)點(diǎn)的值,
    確保返回父節(jié)點(diǎn)時(shí)路徑剛好是從根節(jié)點(diǎn)到父節(jié)點(diǎn)。
    */
public class Solution {
    //記錄所有的路徑
    private ArrayList<ArrayList<Integer>> listAll=new ArrayList<ArrayList<Integer>>();
    //記錄一條
    private ArrayList<Integer> listOne=new ArrayList<Integer>();

    public ArrayList<ArrayList<Integer>> findPath(TreeNode root,int target) {
        if(root==null)
            return listAll;
        listOne.add(root.val);
        target-=root.val;
        if(target==0&&root.left==null&&root.right==null)
            listAll.add(new ArrayList<Integer>(listOne));
        findPath(root.left,target);
        findPath(root.right,target);
        listOne.remove(listOne.size()-1);
        return listAll;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容