一次AC,用的层次遍历,遍历一层的时候记录第一个node
int findBottomLeftValue(TreeNode* root) {
queue<TreeNode *>que;
que.push(root);
TreeNode *leftNode = NULL;
int horizinal = 1;
int tmpHorizinal = 0;
int sum = 0;
while(!que.empty()) {
TreeNode *node = que.front();
sum++;
que.pop();
if (sum == 1) {
leftNode = node;
}
if(node->left) {
que.push(node->left);
tmpHorizinal++;
}
if(node->right) {
que.push(node->right);
tmpHorizinal++;
}
if (sum == horizinal) {
horizinal = tmpHorizinal;
tmpHorizinal = 0;
sum = 0;
}
}
return leftNode->val;
}
后来看了discuss,发现这么写更好,思路是一样的。
int findBottomLeftValue(TreeNode* root) {
queue<TreeNode *>que;
que.push(root);
TreeNode *leftNode = NULL;
while(!que.empty()) {
int size = que.size();
leftNode = que.front();
while(size--) {
TreeNode *node = que.front();
que.pop();
if(node->left) que.push(node->left);
if(node->right) que.push(node->right);
}
}
return leftNode->val;
}