[leetcode]513. 找树左下角的值

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.知识点:

找出二叉树每一层第一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值