首页 > 编程语言 >算法总结

算法总结

时间:2022-08-22 22:58:06浏览次数:55  
标签:总结 curHeight TreeNode val res 算法 二叉树 root

1.二叉树每层的最大值

给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。

题解:看见二叉树的题,遍历用深度优先搜索或者广度优先搜索都是有固定模板的,具体看题意,本题可以用深度优先搜索找每一层的最大值

package com.chenghaixiang.jianzhi2.day15;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 程海翔
 * @school 石家庄铁道大学
 */
public class Office044 {
}
class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode() {
    }

    TreeNode(int val) {
        this.val = val;
    }

    TreeNode(int val, TreeNode left, TreeNode right) {
        this.left = left;
        this.right = right;
    }
}

class Solution {
    //深度优先搜索
    public List<Integer> largestValues(TreeNode root) {
        if(root==null){
            return new ArrayList<>();
        }
        List<Integer> res=new ArrayList<>();
        dfs(res,root,0);
        return res;

    }

    public void dfs(List<Integer> res,TreeNode root,int curHeight){
        //curheight表示的是层数
        //递归先遍历左子树,将当前层的第一个元素添加进链表
        if(curHeight==res.size()){
            res.add(root.val);
        }else {
            //curHeight在链表中表示当前层的下标
            //更新当前层中元素的最大值
            res.set(curHeight,Math.max(res.get(curHeight),root.val));
        }
        if(root.left!=null){
            //curHeight+1层数加1
            dfs(res,root.left,curHeight+1);
        }
        if(root.right!=null){
            dfs(res,root.right,curHeight+1);
        }
        
    }
}
View Code

2.二叉树最底层最左边的值

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

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

题解:同上,只是拿一个值存放最大层,然后优先递归左子树,当层数是最大时再拿一个值存放val

package com.chenghaixiang.jianzhi2.day15;

/**
 * @author 程海翔
 * @school 石家庄铁道大学
 */
public class Office045 {
}
//给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
//
//假设二叉树中至少有一个节点。
class Solution01 {
    int curVal = 0;
    //记录最大层数
    int curHeight = 0;

    //深度优先遍历
    public int findBottomLeftValue(TreeNode root) {
        int curHeight = 0;
        dfs(root, 0);
        return curVal;
    }

    void dfs(TreeNode root,int height){
        if(root==null){
            return;
        }
        dfs(root.left,height+1);
        dfs(root.right,height+1);
        //当前层数大于最大层数,即当前层数是最底层,因为先遍历的左子树,所以当遍历到右子树时,如果最低层有左右子树,height==curHeight不满足条件不进入条件,所以curVal必是最底层 最左边 节点的值
        if(height>curHeight){
            curHeight=height;
            curVal=root.val;
        }

    }
}
View Code

 

标签:总结,curHeight,TreeNode,val,res,算法,二叉树,root
From: https://www.cnblogs.com/chenghaixiang/p/16614526.html

相关文章

  • 排序算法
    排序算法学了几年算法了,回头看几种排序算法居然不会。。。。偷了菜鸟驿站的图不会很认真的分析时间复杂度、空间复杂度,重在实现。冒泡排序比较相邻的元素。如果第一......
  • 实现最简单的 React DOM Diff 算法
    实现最简单的ReactDOMDiff算法本文写于2022年08月22日定义VNode与VNodeList类型首先我们定义一个简单的VNode类型。typeFlag="Placement"|"Delet......
  • 性能测试总结
    性能测试总结梳理性能测试流程(模型)首先做好测试的前期准备,梳理好性能的目标,编写好性能测试的测试用例选择好要用的工具,编写好测试计划,使用选择好的工具或代码来设计场景......
  • EM算法
    EMAlgorithm目录EMAlgorithmJensen'sinequalityEMAlgorithmJensen'sinequalityconvexfunction:\(f''(x)\ge0\)or\(H\ge0\)(Hessianmatrixwhenxisav......
  • 8.22总结
    函数变化考试最后关头,我才发现T1是有规律的,哭~写下一个暴力程序,打表后,你可以发现前n-1项中第i项的答案为\(2^{i-1}\),第n项为\(2^{n-1}-1\),n以后项的答案为前n项的和,就可......
  • 2022/8/22 总结
    A.函数变换花了两个小时试图使用排列组合解决,然而最后发现居然是个结论题……我果然是和结论题有仇吧Solution打个表,就能发现当\(n\)确定时,\(ans_m\)的值有......
  • 复杂度分析、排序算法、二分法、堆的上调和下调
    1.认识复杂度与排序算法复杂度:认识时间复杂度就是看进行了多少次常数操作。(什么是常数操作?赋值、加减乘除运算等都是。调用API操作就不是如list.get(i)。)时间复杂度:在......
  • destinationrule调度算法
    [root@k8s-master11-cluster-loadbalancing]#kubectlapply-fdestinationrule-demoapp.yamldestinationrule.networking.istio.io/demoappconfigured[root@k8s-ma......
  • java算法:快速排序
    快速排序有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“61279345108”这个10个数进行......
  • 快手知识图谱算法工程师面试复盘
    第一次正儿八经地经历大厂面试,自己都没想到自己竟然能坚持一个小时。自己能力很差,但就算是很差的能力,也尽到百分百的努力去表现了。应该大概率是会挂掉的,如果我是hr,也不会......