1. 程式人生 > >劍指offer-25.二叉樹中和為某一值的路徑

劍指offer-25.二叉樹中和為某一值的路徑

path val tmp aux node ptr body 深度 light

0 題目

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

1 分析

深度優先遍歷+回溯.

出點就是,當target==0,且節點沒有子樹的時候。

    vector<vector<int>> FindPath(TreeNode *root, int target)
    {
        vector<vector<int>> ret;
        vector<int> tmp;
        aux(root, target, tmp, ret);
        return ret;
    }

    void aux(TreeNode *root, int target, vector<int> &tmp, vector<vector<int>> &ret)
    {
        if (root != nullptr)
        {
            tmp.push_back(root->val);

            if (target - root->val == 0 && root->left == nullptr && root->right == nullptr)
            {
                ret.push_back(tmp);
                // 這裏pop的原因在於,下面需要return ,如果不pop會影響和偶棉的結果
                tmp.pop_back();
                return;
            }

            aux(root->left, target - root->val, tmp, ret);
            aux(root->right, target - root->val, tmp, ret);
            tmp.pop_back();
        }
    }

  

劍指offer-25.二叉樹中和為某一值的路徑