2023.7.6
这道题关键就是要判断某个节点是否为左叶子节点,但是必须要靠他的父节点来判断,逻辑就是其父节点的左孩子不为空 并且 父节点的左孩子的左孩子和右孩子都为空,此时该节点就是左叶子了。 下面用两种迭代法求解:
队列:
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
queue<TreeNode*> que;
int sum = 0;
que.push(root);
while(!que.empty())
{
int size = que.size();
while(size--)
{
TreeNode* node = que.front();
que.pop();
//判断左叶子节点
if(node->left!=nullptr && node->left->left==nullptr && node->left->right==nullptr) sum += node->left->val;
if(node->left) que.push(node->left);
if(node->right) que.push(node->right);
}
}
return sum;
}
};
栈:
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
stack<TreeNode*> stk;
int sum = 0;
stk.push(root);
while(!stk.empty())
{
TreeNode* node = stk.top();
stk.pop();
if(node->left!=nullptr && node->left->left==nullptr && node->left->right==nullptr) sum += node->left->val;
if(node->right) stk.push(node->right);
if(node->left) stk.push(node->left);
}
return sum;
}
};