1. 程式人生 > >劍指Offer系列-面試題25:二叉樹中和為某一值的路徑

劍指Offer系列-面試題25:二叉樹中和為某一值的路徑

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

思路:

程式碼:

vector<vector<int>> result;
vector<int> tmp;
vector<vector<int>> FindPath(TreeNode* root, int expectNumber)
{
    if(root == NULL)
        return result;
    tmp.push_back(root->val);
    expectNumber -= root->val;
    /// 如果找到了最終結果,就不繼續往下找了,直接返回上一層
    if(expectNumber == 0 && !root->left && !root->right)
    {
        result.push_back(tmp);
        tmp.pop_back();
        return result;
    }
    /// 如果小於零,就不遍歷子樹了
    if(expectNumber < 0)
    {
        tmp.pop_back();
        return result;
    }
    FindPath(root->left, expectNumber);
    FindPath(root->right, expectNumber);
    tmp.pop_back();
    return result;
}



相關推薦

Offer系列-試題25中和路徑

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

offer試題25中和路徑

題目:輸入一棵二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。思路:用棧記錄路徑,sum記錄當前和。如果是葉結點,判斷sum是否等於target,如果等於則輸出。help的方法最後需要將棧頂彈出,sum

offer試題34中和路徑

題目:輸入一顆二叉樹的跟節點和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,陣列長度大的陣列靠前)  連結:https://www.nowcoder.com/qu

offer{試題25中和路徑}

思路:這道題比較有意思,類似的題我在面試裡經常遇到過,圍繞著樹的深度遍歷和廣度遍歷做文章,針對這種型別的題,大家更多考慮的解決方案是遞迴,說白了二叉樹就是一群小二叉樹,上次做寶寶樹的筆試題的時候,出的演算法題就是求任意兩個節點之間的最遠距離,說白了還是遍歷的問題,回到這道題  &n

offer——試題25中和路徑

void FindPath(BinaryTreeNode* pRoot, int expectedSum) { if(pRoot == NULL) return;

試題 25中和路徑

題目描述:給定一個二叉樹,找出所有路徑中各節點相加總和等於給定 目標值 的路徑。一個有效的路徑,指的是從根節點到葉節點的路徑。 今天一直被這道題困擾,思路很簡單,遞迴去判斷這個要求的和是否和已經走到的這個結點的值相比,如果相等那麼一條路徑找到,然後再去尋找其他

offer學習心得]之中和路徑

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

Offer 試題34中和路徑 Java程式碼實現

題目:輸入一棵二叉樹和整數,打印出二叉樹中節點值得和為輸入整數的所有路徑。從樹的根節點開始往下一直到葉節點所經過的節點形成一條路徑。 解題思路:路徑從根節點開始,應該用類似於前序遍歷的方式訪問樹節點。

offer學習筆記(Python)--中和路徑

題目描述 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 思路 可以按照深度優先遍歷(DFS)來處理。建立一個空列表用來存放最終結果。從根節點開始,判斷該節點的值與給定數值是否

offer題解C++【24】中和路徑

題目描述 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 解題思路 按照先序遍歷將結點加入路徑,如果當前結點是葉子結點則判斷當前路徑和是否為目標數,若滿足條件

offer第二十四題【中和路徑】c++實現

題目描述 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 先序遍歷二叉樹,用一個數組記錄當前路徑,如果遍歷到葉子節點就進行判斷是否和給定值相等。 class Solution { public: vect

Offer試題25(Java版)中和路徑

題目:輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。從樹的根節點開始往下一直到葉結點所經過的所有的結點形成一條路徑。 如下圖,輸入二叉樹和整數22,則打印出兩條路徑,第一條路徑包含結點10,12,第二條路徑包含的結點為10,5,7. 一般的資料結構

offer試題8的下一個節點

題目:給定一顆二叉樹和其中的一個節點,如何找出中序遍歷序列的下一個節點?樹中的節點除了有兩個分別指向左、右子節點的指標,還有一個指向父節點的指標。 二叉樹的節點定義如下: struct BinaryTreeNode { int m_nValue; BinaryTreeNode*

offer-24中和路徑

題目描述 輸入一顆二叉樹的根節點和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,陣列長度大的陣列靠前) 思路 dfs演算法 程式碼 public class So

Offer - 24中和路徑

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

offer程式設計題(JAVA實現)——第24題中和路徑

github https://github.com/JasonZhangCauc/JZOffer import java.util.ArrayList; /** * * 劍指offer程式設計題

offer 24中和路徑

二叉樹中和為某一值的路徑 #include <iostream> #include <vector> using namespace std; using namespace std; struct TreeNode { int val; TreeN

Offer 25中和路徑 Java

對二叉樹的相關演算法還是不瞭解。 這裡有兩點是之前所用不好的: 1:把棧用進來; 2:有一個變數記錄當前的數值,這個在遞迴的過程當中就能夠得到之前的值。 package test; import java.util.Stack; public class FindPat

offer——(25中和路徑

參考題解: 牛客網 深度優先搜尋(DFS):此題解中,程式執行找到[10, 5, 4]後,4為葉子節點了,remove掉4,變為[10, 5],這時執行if(root.right != null) FindPath(root.right,target); 找到[10, 5,

offer中和路徑(Python)

站在巨人的肩膀上,風景這邊獨好; 親自爬上巨人的肩膀,才知風景為什麼這麼美。 題目描述 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 解題思