LeetCode#513 Find Bottom Left Tree Value题解(C++版)

题干

这里写图片描述

原题网址:
https://leetcode.com/problems/find-bottom-left-tree-value/description/

难度

中等(Medium)

知识点

树的遍历、二叉树

题干解析

给你一棵二叉树,要你找出底层(深度最深)的子节点中最左边的那一个值。

解题思路

首先,要找到最底层的树节点,我们需要一个标志告诉我们现在遍历的树节点是第几层,所以我选择在遍历函数的参数那里加入一个代表此树节点的层数的参数,并定义一个全局变量表示目前遍历到的最深的树的层数(都是从1算起),只有当目前节点的层数大于已经遇到的最深的树的层数才会被考虑。
由于要获取最左边的数值,所以我们在遍历时,只要保证同一层的树节点,左边的比右边的优先搜索到就可以了。我的代码采用的是深度优先搜索(广度优先搜索也是可以的),先序遍历法(即中、左、右的顺序),当然,中序遍历(左、中、右顺序)和后序遍历(左、右、中顺序)也都是可以的。

代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
int ans, deep_floor; // 分别代表答案、目前访问到的最深层数
class Solution {
public:
    void find(TreeNode *root, int floor) {  // 深度优先先序遍历,用于递归~
        if (root != NULL) {
            if (floor > deep_floor) {
                ans = root->val;
                deep_floor = floor;
            }
            find(root->left, floor + 1);
            find(root->right, floor + 1); 
        }
    }
    int findBottomLeftValue(TreeNode* root) {
        if (root != NULL) {  // 先初始化一个值
            ans = root->val;
            deep_floor = 1;
        }
        find(root, 1);  // 开始遍历
        return ans;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值