给定二叉树的根节点 root ,返回所有左叶子之和。

思路:判断一个节点是否威威左叶子,需要判断其是否为叶子节点以及它是否为其父节点的左孩子。
后序遍历,递归法
- class Solution {
- public:
- int sumOfLeftLeaves(TreeNode* root) {
- if(root==NULL) return 0;
- if(root->left==NULL&&root->right==NULL) return 0;
- //左右中
- int leftsum=sumOfLeftLeaves(root->left);
- if(root->left!=NULL&&root->left->left==NULL&&root->left->right==NULL)
- leftsum=root->left->val;
- int rightsum=sumOfLeftLeaves(root->right);
- return leftsum+rightsum;
- }
- };
迭代法:
- class Solution {
- public:
- int sumOfLeftLeaves(TreeNode* root) {
- stack
st; - if(root==NULL) return 0;
- st.push(root);
- int result=0;
- while(!st.empty())
- {
- TreeNode* node=st.top();
- st.pop();
- if(node->left!=NULL&&node->left->left==NULL&&node->left->right==NULL)
- result+=node->left->val;
- if(node->right) st.push(node->right);
- if(node->left) st.push(node->left);
- }
- return result;
- }
- };