思路:通过队列对树进行层序遍历,每层记录该层的第一个结点,最后一层的第一个结点的值则是该树左下角的值
int findBottomLeftValue(struct TreeNode* root){
struct TreeNode *Nodes[10001];
struct TreeNode *temp;
int right=0;//队列的右指针,指向最后一个元素的下一个位置
int left=0;//队列的左指针
int last=1;//记录每层的第一个结点,初始化为第二层第一个结点的位置
Nodes[right++]=root;
temp=root;//用于暂存每层的第一个结点
while(right>left){//当队列非空时
while(left<last){//当该层未遍历完时
root=Nodes[left++];
if(root->left!=NULL)
Nodes[right++]=root->left;
if(root->right!=NULL)
Nodes[right++]=root->right;
}
if(right>left){//每层遍历完成后
last=right;//last指向下下层的第一个结点
temp=Nodes[left];//temp更新为下一层的第一个结点
}
}
return temp->val;
}