1. 程式人生 > >輸出二叉樹和為特定整數的所有路徑

輸出二叉樹和為特定整數的所有路徑

我們用二叉樹的前序遍歷來實現所有路徑和的查詢

public class Solution {
    private ArrayList<ArrayList<Integer>> all = new ArrayList<ArrayList<Integer>>();
    private ArrayList<Integer> tem = new ArrayList<Integer>();
    public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
        if(root == null) return all;
        tem.add(root.val);
        target -= root.val;
       //如果一條路徑和為target且為葉節點則為一個合格的路徑。
        if(target == 0 && root.left == null && root.right == null)
            all.add(new ArrayList<Integer>(tem));
        FindPath(root.left, target);
        FindPath(root.right, target);
        //一條路徑遞迴完成後把tem的最後值,即本路徑的最後一個節點刪掉並返回到父節點,因為整個二叉樹的所有路徑共用tem
       tem.remove(tem.size()-1);
        return all;
    }
}
通過遞迴實現二叉樹的前序遍歷。

相關推薦

輸出特定整數所有路徑

我們用二叉樹的前序遍歷來實現所有路徑和的查詢 public class Solution { private ArrayList<ArrayList<Integer>> all = new ArrayList<ArrayList<

劍指offer:第25題某一值得路徑

//思路:可以利用全路徑逐層遞減,在用遞迴來尋找路徑 import java.util.ArrayList; import java.util.List; public class _Test_25_2 { ArrayList<ArrayList

劍指offer——找出n的路徑

連結串列和二叉樹比較難做,主要因其均以鏈相連線,.next and .left 來輸出結構中的資料,無法精確定位,所以通常用遞迴方法實現。 通過遞迴方法,本人感覺最重要的是確定.next的這部中具體實現的操作,然後逐漸實現遞迴。找出二叉樹和為n的路徑,就針對每一步做加和操作以及記錄路徑,並判

中和給定值的路徑

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

劍指offer——中和某一值得路徑

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

中和某一個值得路徑

題目 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 程式碼 ArrayList<ArrayList<Integer>> listAll=new ArrayL

【劍指offer】中和某一值得路徑 java

路徑為從根節點到葉節點一條路徑,路徑經過的各節點數值之和等於某一給定數值,則列印路徑上的節點 因為需要列印滿足條件的路徑節點資訊和各節點之和,需要棧記錄經過的節點,和一個儲存數值之和的變數用前序遍歷

劍指offer25:中和某一值得路徑

import java.util.LinkedList; import java.util.Stack; /** * Created by WHZ on 2017/4/1. */ public class offer25 { private class Tr

刷題:輸入一顆一個整數,打印出中結點值的輸入整數所有路徑

原題:輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 思路分析:首先思考節點值的和為輸入的整數,每條路徑都一定是從根節點到葉子節點,在資料結構中從根節點到葉子節點的遍歷稱之為深度優先遍歷DFS。因此整

輸入一顆一個整數,打印出中結點值的輸入整數所有路徑(劍指offer)

      解題思路:遍歷二叉樹,採用遞迴的方法,將滿足條件的路徑壓入一維陣列當中,注意當找到滿足條件的路徑時,先將陣列壓入二維陣列,然後將一維陣列中的每個元數彈出,以存放新的路徑。 /* struct TreeNode {int val;struct TreeNode

輸入一顆一個整數,打印出中結點值的輸入整數所有路徑

ger roo pop void set null push ava 所有 題目: 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 解答: 1 import java.util.*;

【資料結構週週練】014 利用棧非遞迴演算法求鏈式儲存的是否完全

一、前言 首先,明天是個很重要的節日,以後我也會過這個節日,在這裡,提前祝所有程式猿們,猿猴節快樂,哦不,是1024程式設計師節快樂。 今天要給大家分享的演算法是判斷二叉樹是否為完全二叉樹,相信大家對完全二叉樹的概念並不陌生,如果是順序儲存就會很方便,那鏈式儲存怎麼判斷呢,我的做法是:若

C語言根據前序遍歷後續遍歷還原,並輸出的高度

7-23 還原二叉樹 (25 point(s)) 給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。 輸入格式: 輸入首先給出正整數N(≤50),為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為N的不包含重複英文字母(區別大小寫)的字串

3——各種遍歷輸出

程式碼輸出結果如下: 二叉樹 bt:A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I))) ***層次遍歷序列:A B C D E F G H I J K L M N 先序遍歷序列: 遞迴演算法:A B D E H J K L M N C F G I 非遞迴演算法:A B

劍指offer66題--Java實現,c++實現python實現 24.中和某一值的路徑

題目描述 輸入一顆二叉樹的跟節點和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,陣列長度大的陣列靠前) C++ /* struct TreeNode { int val; s

連結串列的方式建立一棵,並以非遞迴演算法中序輸出;計算的繁茂度,並判斷是否完全

以二叉連結串列的方式存二叉樹,輸入時要以先序方式輸入,其中,空子樹用#表示。 二叉樹的繁茂度定義為其高度乘其每層結點最大值。演算法為先用遞迴演算法求二叉樹高度:其高度為左右子樹最大值加1,所以用先序遍歷,定義ld與rd分別為左右子樹高度,最後返回其較大值加1即可。二叉樹寬度

[leetcode][遞迴] [java]105題 根據前序中序輸出

資料結構學過,根據前序和中序可以確定唯一一棵二叉樹。解法:理解是比較簡單的,前序確定根節點的值,中序找到根節點的位置,根節點的前半部分是左子樹,根的後半部分是右子樹,再構建左子樹,右子樹。以此構建二叉樹,當然理解起來很簡單,程式碼需要使用遞迴訪問和實現。例子:,構建樹:程式碼

遍歷的應用:輸出所有葉結點求高度

利用二叉樹的遍歷方法,我們可以求得一棵二叉樹的很多東西,例如我們可以遍歷求得一棵二叉樹的所有葉結點,到我們找到一個結點的左右子樹都為空了,它就是其中一個葉結點,我們把它儲存起來,在遍歷完一棵二叉樹後,我們就可以找到所有的葉結點。同理,我們也可以通過遍歷一棵二叉樹的所有節點後,

7-8 輸出中值x的節點的所有祖先

//輸出二叉樹中值為x的節點的所有祖先 #include "btree.cpp" bool ancestor(BTNode *b,ElemType x) { if (b==NULL) return false; else if (b->lchild!=NULL

中和某一值的所有路徑

說明 util ray 如果 tree 二叉樹 節點 integer fin 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 import java.util.ArrayList