1. 程式人生 > 其它 >牛客網-二叉樹根節點到葉節點的所有路徑和

牛客網-二叉樹根節點到葉節點的所有路徑和

技術標籤:深度優先搜尋

題目描述

給定一個僅包含數字\ 0-90−9的二叉樹,每一條從根節點到葉子節點的路徑都可以用一個數字表示。
例如根節點到葉子節點的一條路徑是1\to 2\to 31→2→3,那麼這條路徑就用\ 123123來代替。
找出根節點到葉子節點的所有路徑表示的數字之和
例如:

這顆二叉樹一共有兩條路徑,
根節點到葉子節點的路徑1\to 21→2用數字\ 1212代替
根節點到葉子節點的路徑1\to 31→3用數字\ 1313代替
所以答案為\ 12+13=2512+13=25

示例1

輸入

{1,0}

返回值

10

示例2

輸入

{1,#,9}

返回值

19
/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
public:
    vector<int>num;
    int ans=0;
    //把v動態陣列轉化為數字
    int to_number(vector<int>& v)//加了求址符的執行時間更快
    {
        int sum=0;
        for(int i=0;i<v.size();i++)
            sum=sum*10+v[i];
        return sum;
    }
    
    int sumNumbers(TreeNode* root) {
        // write code here
        if(root==NULL)return 0; //這句不加會超時,也就是報段錯誤,我還沒想明白
        num.push_back(root->val);
        if(root->left==NULL&&root->right==NULL){
            ans+=to_number(num);
        }
            if(root->left){sumNumbers(root->left);num.pop_back();}
            if(root->right){sumNumbers(root->right);num.pop_back();}
            return ans;
    }
};