首页 > 其他分享 >找树左下角的值-513

找树左下角的值-513

时间:2024-09-16 11:46:16浏览次数:1  
标签:遍历 int 找树 depth result max 左下角 root 513

题目描述

给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。

假设二叉树中至少有一个节点。

解题思路

这道题用层次遍历的方式来说是比较简单的,用递归的话如果我们看别人的精简代码很难看出其中隐藏的细节,这里递归遍历其实我们用到了回溯的思想,我们直接采用前序遍历的方式(其实三种遍历方式都是一样的),定义一个max_depth作为参考值记录当前遍历子树的最大深度,如果我们遍历到了叶子节点而且其深度大于这个max_depth我们就可以进行赋值操作,反之则不用,因为深度没有它大的话肯定不是最后一层的叶子节点,没有我们上一次遍历子树的层次高,就无需进行赋值操作

代码实例

层次

import java.util.*; 
class Solution {
    public int findBottomLeftValue(TreeNode root) {
        Deque<TreeNode> deque=new LinkedList<>();
        deque.add(root);
        List<Integer> result=new ArrayList<>();
        // result.add(root.val);
        while(!deque.isEmpty()){
            int size=deque.size();
            for(int i=0;i<size;i++){
                TreeNode temp=deque.pollFirst();
                result.add(temp.val);
                if(temp.right!=null){
                    deque.addLast(temp.right);
                }
                if(temp.left!=null){
                    deque.addLast(temp.left);
                }
            }

        }

        return result.get(result.size()-1);


    }
}

递归

import java.util.*;

class Solution {
    int max_depth=Integer.MIN_VALUE;
    int result=0;
    public int findBottomLeftValue(TreeNode root) {
    
        bianli(root,1);
        return result;
    }

    public void bianli(TreeNode root,int depth) {
        if(root.left==null && root.right==null){
            if(depth>max_depth){
                max_depth=depth;
                result=root.val;
            }
        }
        
        if(root.left!=null){
            bianli(root.left,++depth);
        // 回溯的思想,我们要减去depth然后回溯到根节点然后再从1开始去遍历我们的右子树
            depth--;
        }

        if(root.right!=null){
            bianli(root.right,++depth);
            depth--;
        }

    }
}

标签:遍历,int,找树,depth,result,max,左下角,root,513
From: https://www.cnblogs.com/dfj-blog/p/18416124

相关文章

  • FIT5137 M-Stay Residential service
    FIT5137Assignment2-S22024 (Weight=40%)Due-Friday,20September2024,4:30PMGeneralInformationandSubmissiono Thisisanindividualassignment.o Submissionmethod:SubmissionisonlinethroughMoodle.o Penaltyforlatesubmission:5%deduc......
  • 代码随想录算法训练营,9月12日 | 513.找树左下角的值,112. 路径总和,106.从中序与后序遍
    513.找树左下角的值题目链接:513.找树左下角的值文档讲解︰代码随想录(programmercarl.com)视频讲解︰找树左下角的值日期:2024-09-12想法:1.迭代:用层序遍历,遍历每层时记录下第一个节点的值,到最后一层就是要求的值;2.递归:根据最大的深度来找目标值。Java代码如下://迭代classSolut......
  • TMC5130—瑞士公司Thermoplan成功的基石
    瑞士的咖啡企业Thermoplan自1999年到现在就以开发设计和加工制作星巴克选用的咖啡机而广为人知,它生产制造的全自动化咖啡机在煮咖啡时近乎没有人为异常的空间。现今,凭借将独具匠心与最新技术相融在一起,任何一个杯子都将称得上Black&White4和LatteArtist锦上添花的精致冲泡产品。......
  • 基于python的物流企业资产管理系统的设计与实现---附源码89513
     摘 要本文介绍了一种基于Python的物流企业资产管理系统的设计与实现。随着物流行业的快速发展,资产的有效管理和监控变得尤为重要。本文首先分析了物流企业资产管理的需求,包括资产登记、报备、维修、采购等核心功能,并指出了现有系统的不足。在此基础上,我们提出了一个基......
  • Java平衡树--查找树的新建与树的实现
    Java学习+面试指南:https://javaxiaobear.cn1、查找树的定义一棵2-3查找树要么为空,要么满足满足下面两个要求:2-结点含有一个键(及其对应的值)和两条链,左链接指向2-3树中的键都小于该结点,右链接指向的2-3树中的键都大于该结点。3-结点含有两个键(及其对应的值)和三条链,左链接指向的2......
  • 代码随想录第16天:513.找树左下角的值、112. 路径总和、106.从中序与后序遍历序列构造
    513.找树左下角的值,层序遍历//找树左下角的值,用层序遍历很容易实现#include<iostream>#include<queue>structTreeNode{intval;TreeNode*left;TreeNode*right;TreeNode(intx):val(x),left(nullptr),right(nullptr){}};//找到最底层......
  • AcWing 1078. 旅游规划 (DFS找树的直径+直径中点性质求解,无DP)
    原题链接题目描述算法引用自树的直径-OI-Wiki:若树上所有边边权均为正,则树的所有直径中点重合证明:使用反证法。设两条中点不重合的直径分别为\(\delta(s,t)与\delta(s',t')\),中点分别为\(x\)与\(x'\)。显然,\(\delta(s,x)=\delta(x,t)=\delta(s',x')=\delta(......
  • R语言ggplot2可视化实战:将可视化图像的标题(title)放置在图像的左下角
     R语言ggplot2可视化实战:将可视化图像的标题(title)放置在图像的左下角(customizetitlepositoninbottomleftofggplot2graph)目录R语言ggplot2可视化:将可视化图像的标题(title)放置在图像的左下角(customizetitlepositoninbottomleftofggplot2graph)#仿真数据......
  • 二叉查找树
    如果一棵二叉树能“查找”,那么这棵树的每一个节点都有一个“键值”,这些节点都按照键值有序排列,这棵树就叫做二叉查找树(BST)。BST的性质每个节点都有唯一的键值,而且可以比较大小。每个节点的左儿子的键值小于自己的键值,自己的键值又小于右儿子的键值,最小键值的节点没有左儿......
  • MT2513B 无外围5W电源芯片
    MT2513是一款高度集成自供电原边反馈最大6W电源芯片。MT2513B内置功率三极管,采用脉冲频率调制(PFM)建立非连续导电模式(DCM)的反激式电源,外围设计极简化。MT2513具有可变原边峰值电流,通过最大原边峰值电流和变压器原副边匝比来设置输出恒流点,通过外置FB电阻设置输出恒压点。MT25......