1.题目:
给定一个二叉树,在树的最后一行找到最左边的值。
示例 :
输入:
1
/ \
2 3
/ / \
4 5 6
/
7
输出:
7
2.代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
//即bfs找出每一层第一个
#define MAX 10000
int bfs(struct TreeNode* root){
if(!root)
return NULL;
int front=-1,rear=-1,first=0;
struct TreeNode* Q[MAX],*p,*temp=root;
Q[++rear]=root; //入跟
while(front<rear){ //栈不空
p=Q[++front]; //出栈
if(p->left) //入左
Q[++rear]=p->left;
if(p->right) //入右
Q[++rear]=p->right;
/*
之后是关键步骤,出栈位置为front的话,执行到这一步的状态:
1.若有只有左; 2. 若只有右。 3. 若有左有右
3 (first) 3(first) 3(first)
/ \ / \
1(rear) 2(rear) 1(rear-1) 2(rear)
4.其他情况:
3(first) 4 3 4(first)
/ => /
2 first++ 2(rear)
rear在上一层
*/
if(front==first){
if(p->left){
temp=p->left;
if(p->right)
first=rear-1;
else
first=rear;
}
else if(p->right){
temp=p->right;
first=rear;
}
else
first++;
}
}
return temp->val;
}
int findBottomLeftValue(struct TreeNode* root) {
return bfs(root);
}
3.知识点:
找出二叉树每一层第一个。