1. 程式人生 > >LeetCode 404左子葉之和 (二叉樹)

LeetCode 404左子葉之和 (二叉樹)

1.左子葉之和

計算給定二叉樹的所有左葉子之和。
示例:

   3
   / \
  9  20
    /  \
   15   7

在這個二叉樹中,有兩個左葉子,分別是 9 和 15,所以返回 24
思路:其實還是蠻簡單的,搜尋每個節點的最左子葉,並相加。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int sumOfLeftLeaves(TreeNode* root) {  
        int sumOfLeft=0;
        stack<TreeNode*> stack;
        int count=0;
        int judgeRoot=1;
        while(root || !stack.empty()){
            while(root){
                stack.push(root);
                count=count+1;
                int value=root->val;
                judgeRoot=judgeRoot+1;
                if(root->left==NULL && count>=2 &&root->right==NULL){  //count主要是避免將右子葉的數加上
                    sumOfLeft+=value;                
                }
                if(root==NULL && judgeRoot==2){  //這裡主要是用來判斷輸入root是[1]這種情況
                    return 0;
                }
                root=root->left;
            }
            if(!stack.empty()){
                root=stack.top()->right;
                count=0;
                stack.pop();
            }
        }
     return sumOfLeft;
    }
};