给定二叉树的根节点 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<TreeNode*> 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;
}
};