Leetcode-513:找树的左下角值

513. 找树左下角的值

题目描述:
给定一个二叉树的根节点root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。
需要把握的是题中的最左边的意思,因为是最左边,所以按照题目要求我们求的节点不一定就是左叶子节点,也有可能是最深层的一个右叶子,下面是几个例子及其结果
image.png

根据上面的图示我们可以很容易的知道求解目标就是树的最深层的最左边节点的值。对于此类的求解问题一般有两个方向:深度优先和广度优先,一般来说对于涉及层次的问题求解来说,广度优先具有更加清晰的逻辑。下面我们分两个角度来分析解决问题。

深度优先DFS(O(N),O(N))

深度优先我们通过递归以先序遍历为基础来实现。为了方便层次的比较我们使用一个引用形参curdepth来记录已求出的最左边的值所处的层次方便更新迭代。另外使用depth来表示当前节点所处的层次,为了确保回溯的正确性(不干扰其他节点的深度更新),depth需要设为一个普通形参。

class Solution {
   
public:
    // 其中num是需要记录返回的值,depth是当前访问的树结点的深度
    // curdepth是保存的返回值对应的节点的深度
    void getLeft(TreeNode* root, int &num,int depth,int &curdepth){
   
        if(root == nullptr) return;
        // 保存每一层的最左边元素
        
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值