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

算法总结

时间:2022-08-27 22:37:32浏览次数:51  
标签:总结 结点 TreeNode val 算法 二叉树 root 节点

1.二叉树的右侧视图

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

题解:根之前二叉树解题类似,用广度优先搜索或者深度优先搜索遍历二叉树,这个题就是取每一层的最后一个元素,使用一个队列存储每一层的结点完成对层结点遍历

package com.chenghaixiang.jianzhi2.day15;

import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

/**
 * @author 程海翔
 * @school 石家庄铁道大学
 */
public class Office046 {
}
//给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
//即取每一层的最后一个元素
class Solution02 {
    public List<Integer> rightSideView(TreeNode root) {
        Queue<TreeNode> queue=new LinkedList<>();
        if(root!=null){
            //队列存储每一层的结点
            //初始化添加根结点
            queue.add(root);
        }
        List<Integer> res=new LinkedList<>();

        while (!queue.isEmpty()){
            //获取当前层中结点个数
            int lg=queue.size();
            //遍历队列
            for(int i=0;i<lg;i++){
                TreeNode q=queue.poll();
                //取每一层的最后一个结点
                if(i==lg-1){
                    res.add(q.val);
                }
                if(q.left!=null){
                    queue.add(q.left);
                }
                if(q.right!=null){
                    queue.add(q.right);
                }
            }
        }
        return res;
    }
}
View Code

2.二叉树剪枝

给定一个二叉树 根节点 root ,树的每个节点的值要么是 0,要么是 1。请剪除该二叉树中所有节点的值为 0 的子树。

节点 node 的子树为 node 本身,以及所有 node 的后代。

题解: 这题很简单就是递归二叉树,将结点值为0,并且没有子树的结点删除

package com.chenghaixiang.jianzhi2.day16;

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

    TreeNode() {
    }

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

    TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}
//给定一个二叉树 根节点 root ,树的每个节点的值要么是 0,要么是 1。请剪除该二叉树中所有节点的值为 0 的子树。
//
//节点 node 的子树为 node 本身,以及所有 node 的后代。
class Solution {
    public TreeNode pruneTree(TreeNode root) {
        if(root==null){
            return null;
        }
        root.left=pruneTree(root.left);
        root.right=pruneTree(root.right);
        //结点值为0,并且没有子树的结点删除
        if(root.right==null&&root.left==null&&root.val==0){
            return null;
        }
        return root;
    }
}
View Code

 

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

相关文章

  • 每周总结(22/8/27)
    HBase定义HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。1.2HBase数据模型逻辑上,HBase的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列......
  • 5 - 自动化测试常见面试题总结
    一、测试时接口调不通,如何去排查1、接口没有任何响应很多时候在做接口测试时,会发现接口没有任何返回,比如浏览器一直在转圈,或者返回一个空白页面。用接口工具测试时,工具......
  • 「闲话」NOI2022 考试总结
    NOI2022考试总结Day1Day1前一晚的感觉就不太好。考前又兴奋跃跃欲试,又有点紧张,完全控制不住自己的脑子。晚上睡觉的时候,呆在被子里面莫名燥热,又不敢随便掀开怕感冒,......
  • 人物交互算法(HOI)学习笔记之 ——QPIC
    论文简介QPIC:Query-BasedPairwiseHuman-ObjectInteractionDetectionwithImage-WideContextualInformation[论文地址][https://arxiv.org/abs/2103.05399][代......
  • 常见性能优化实践总结
    常见性能优化实践总结一:代码这一点最容易引起技术人员的忽视。很多技术人员拿到一个性能优化的需求以后,言必称缓存、异步、JVM等。有一些性能问题,完全是由于代码写的不合......
  • ZJU-199001 第三周练习 2 数字特征值 位运算算法
    题目对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值.对于一个整数,从个位开始对每一位数字编号,个位是\(1\)号,十位是\(2\)号,以此类推.这个整数......
  • 分治算法(汉诺塔)
    1.分治算法介绍1)分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最......
  • KMP算法学习记录
    KMP算法作用:用于字符串匹配。1准备前缀:指不包含最后一个字符的所有以第一个字符开头的连续子串。后缀:指不包含第一个字符的所有以最后一个字符结尾的连续子串。next[......
  • 常见算法题
    Golang//求2个很大数之和funcmaxNumSum(astring,bstring)string{ size:=0 alen:=len(a) blen:=len(b) ifalen>blen{ size=alen }else{ si......
  • 总结
    l1=[23,33,65,'barry']l1.pop()print(l1)#默认删除最后一个remove按照元素删除clear清空del索引,切片(步长)查:索引,切片,for循环元组:只读列表()拆包range:自己控制范围......