【劍指offer】二叉樹中和為某一值的路徑,C++實現


原創文章,轉載請注明出處!

博客文章索引地址

1.題目

      輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑由結點和有向邊組成,從根結點到葉節點。

// 二叉樹結點的定義
struct BinaryTreeNode
{
      int val;
      BinaryTreeNode *left;
      BinaryTreeNode *right;           
}

       舉例:

二叉樹中有兩條和為22的路徑:{10,5,7}和{10,12}

2.思路

      本題使用前序遍歷的方式訪問節點,使用二維向量result存儲全部路徑,使用一維向量tmp存儲當前路徑。遍歷二叉樹的過程:按前序遍歷順序訪問每一個節點。訪問每個結點時,將結點添加到路徑向量tmp中。如果當前結點是葉子結點,則判斷當前路徑是否是符合條件的路徑,符合條件的路徑存入到二維向量result;如果當前結點不是葉子結點,則遞歸當前節點的左右子節點。舉例:

3.代碼

class Solution {
public:    
    vector<vector<int> > FindPath(TreeNode* root,int expectNumber) 
    {
        if(root) dfsFind(root, expectNumber);
        
        return allRes;
    }
    
    void dfsFind(TreeNode * node , int target)
    {
        tmp.push_back(node->val);
        
        if(!node->left && !node->right)
        {
            if(target - node->val == 0)
                allRes.push_back(tmp);
        }
        else 
        {
            if(node->left) dfsFind(node->left, target - node->val);
            if(node->right) dfsFind(node->right, target - node->val);
        }
        
        if(!tmp.empty())
            tmp.pop_back(); 
    }
private:
    vector<vector<int> >allRes;
    vector<int> tmp;
};

4.測試用例

  • 空指針
  • 二叉樹中沒有符合條件的路徑
  • 二叉樹中有一條符合條件的路徑
  • 二叉樹中有多條符合條件的路徑


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM