牛客網《劍指Offer》(24)二叉樹中某一值的路徑

題目描述

輸入一顆二叉樹的根節點和一個整數,打印出二叉樹中結點值的和爲輸入整數的所有路徑。路徑定義爲從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,數組長度大的數組靠前)

題目分析

此題屬於典型的遞歸運算,最複雜的在於路徑的存儲,所以需要引入全局變量,防止值被覆蓋。大致思路如下:

1、遞歸跳出條件:找見符合路徑:累計和等於輸入值,左右子節點均爲空。

2、遍歷順序:根節點,左節點,右節點。

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    vector <vector<int> > result;
    vector<int> temp;
    vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
          
       if(root == NULL)
             return result;//根節點爲空
        temp.push_back(root ->val);
       if(root -> left == NULL && root -> right == NULL && root ->val == expectNumber)
           result.push_back(temp);
       if(root -> left != NULL && root ->val < expectNumber)
            FindPath(root -> left,expectNumber - root->val);
       if(root -> right != NULL && root ->val < expectNumber)
            FindPath(root -> right,expectNumber - root->val);
        temp.pop_back();
        return result;
    }
};

說明:上述代碼來自網絡,不是太理解。此外感覺該代碼未安裝題目要求排序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章