数据结构】二叉树篇|超清晰图解和详解:后序篇

在这里插入图片描述

  • 博主简介:努力学习的22级计算机科学与技术本科生一枚🌸
  • 博主主页: @是瑶瑶子啦
  • 每日一言🌼: 你不能要求一片海洋,没有风暴,那不是海洋,是泥塘——毕淑敏

目录

  • 一、核心
  • 二、题目

一、核心

我们清楚,在二叉树的遍历中,通常有三个位置:

  • 前序位置
  • 中序位置
  • 后序位置

今天我们来具体总结一下其中的两个位置:

  • 🍊 前序:它能获得的信息:当前节点,但是不难获得左右节点(或者可以叫做子树的信息),一般大多数情况。
  • 🍊后序:当前节点信息+左右子树信息。所以当一个二叉树的题目,在遍历的过程中不仅需要看遍历到的当前节点的信息时,还要看其子树的信息,那么通常要在后序位置上做文章,利用好递归函数的返回值——获取子树信息。—— 本质还是第二种二叉树问题:分解成子问题,利用好返回值

下面详细讲一个题目,来体会一下

二、题目

🔗652. 寻找重复的子树
在这里插入图片描述

  • 👧🏻思路:

    • 首先,明确的是,这题的本质还是:遍历。因为每个节点为根就是一个子树,找重复子树,那么每个节点都要遍历到这是毋庸置疑的。⭐
    • 遍历到了这个节点,我如何知道以这个节点为根的子树是什么样子的呢?——根节点+左右子树。这个时候只知道此时的根节点什么样子没什么用,关键是也要知道以它为根的左右子树什么样子。那么这个时候要在后序位置上做文章了。因为后序位置处于一个:既遍历到了根节点也遍历到了子树节点的一个位置,即:既有根节点信息,又有以此根节点为根的子树信息。⭐
    • 其次,可以利用前面所讲的二叉树的序列化,以字符串的形式来把该二叉树存起来,再用字符串的哈希表来判断是否重复。
  • 🙇🏻‍♀️代码:

/*** Definition for a binary tree node.* public 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;*     }* }*/
class Solution {Map<String, Integer> map = new HashMap<>(); //存储二叉树的序列化字符串,判断是否重复List<TreeNode> ans = new ArrayList<>(); //存储答案,即:有重复子树的根节点public List<TreeNode> findDuplicateSubtrees(TreeNode root) {dfs(root);  //遍历二叉树return ans;}//这个遍历函数的作用:序列化一颗二叉树,返回序列化字符串(利用好返回值)String dfs(TreeNode root){if(root == null) return"#";StringBuilder sb = new StringBuilder();//前序位置sb.append(root.val).append(",");//中序sb.append(dfs(root.left)).append(dfs(root.right));//获取左右子树信息//后序位置String key = sb.toString();//存储整个二叉树信息map.put(key, map.getOrDefault(key, 0) + 1);if(map.get(key) == 2) ans.add(root);    //一旦超过2个。就addreturn key;}
}

💐若有疑问的地方,欢迎随时在评论区or私信找瑶瑶子交流讨论🌺

在这里插入图片描述

  • Java岛冒险记【从小白到大佬之路】

  • LeetCode每日一题–进击大厂

  • Go语言核心编程

  • 算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1620946.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Yandex SEO和Google SEO有啥区别?5000字说必须要了解的一些事儿

最近筋斗云SEO服务有做一些俄罗斯市场的SEO&#xff0c;而做俄罗斯的SEO相当于就是要做Yandex的SEO。对比Google的SEO优化&#xff0c;其实有比较多的区别&#xff0c;但总体算法、逻辑等等都大致相似。本文从Linus自己的研究和搜集的公开信息&#xff0c;对比一下Google和Yand…

阿里,百度,腾讯,360,新浪,网易,小米等开源项目

奇虎360 https://github.com/Qihoo360 1.MySQL中间层 Atlas Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上&#xff0c;修改了大量bug&#xff0c;添加了很多功能特性。目前该项…

大公司都有哪些开源项目~~~阿里,百度,腾讯,360,新浪,网易,小米等

红色字体是现阶段比较火的 ---------------------------------------------------------------------------------------------------------------- 奇虎360 https://github.com/Qihoo360 1.MySQL中间层 Atlas Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于M…

(读) 周鸿祎重新思考360(有感)

为什么80%的码农都做不了架构师&#xff1f;>>> 我们的红衣教主——周鸿祎&#xff08;yi&#xff09; 我只能从我的印象中和对他的了解中说出&#xff1a; 公司的人群 规模&#xff1a;800&#xff08;上市前&#xff09;-3/4000人&#xff08;目前&#xff09;目…

WIFI市场,除了免流量还能如何玩?

此前手机QQ公测QQWiFi功能&#xff0c;在最近发布的手机QQ5.3安卓版本中&#xff0c;正式全员开放QQwifi功能&#xff0c;用户可以通过简单几步接入运营商和商户的500多万WIFI热点&#xff0c;巨大的用户基础让本已热闹的WIFI市场又增变数。在此之前&#xff0c;微信、小米、阿…

java版-wifi无线网络搭建

这几天 360出了一款随身WIFI&#xff0c;非常小巧&#xff0c;使用也比较方便。插在USB的接口上就能自动创建一个无线网络环境。但是价格却要19.9元&#xff0c;相信大部分的孩子会觉得这么便宜呀。赶快入手。但是真的值这个价格吗&#xff1f;我可以说这个玩意毫无技术含量&am…

关于类的隐形生成函数

https://www.youtube.com/watch?ve8Cw17p_BiU&listPL5jc9xFGsL8FWtnZBeTqZBbniyw0uHyaH&index6 https://www.youtube.com/watch?vKMSYmY74AEs&listPLE28375D4AC946CC3&index4 如果只有copy asignment operator, 那么default construct will be generated as…

证券低延时环境设置并进行性能测试

BIOS设置BIOS参考信息 关闭 logical Process Virtualization Technology 在System Profiles Settings 中System Profile 选择Performance Workload Profile 选择HPC Profile OS中信息参考在/etc/default/grub文件中添加 intel_idle.max_cstate=0 processor.max_cstate=0 idle=p…

探索Java的ReentrantLock:实现并发锁的强大力量

前言&#xff1a; &#x1f44f;作者简介&#xff1a;我是笑霸final&#xff0c;一名热爱技术的在校学生。 &#x1f4dd;个人主页&#xff1a;个人主页1 || 笑霸final的主页2 &#x1f4d5;系列专栏&#xff1a;java系列 &#x1f4e7;如果文章知识点有错误的地方&#xff0c;…

苹果基带坏了怎么办_iPhone12 上市,苹果这次有哪些改变

苹果每年一度发布新品时间一般在9月份 但今年疫情使得发布延后&#xff0c;这里对iPhone12网上流传的配置做下总结 通讯方面: 这次毫无疑问的事iPhone12从之前的4G升级到了5G&#xff0c;使用高通X55基带&#xff0c;这次再也没用英特尔的基带了&#xff0c;英特尔基带手机信号…

iPhone12基带确认,果粉放心

在iPhone12发布的时候都没有提到iPhone12到底用的是什么基带&#xff0c;我之前在粉丝留言下方说了是高通基带&#xff0c;我当时说可能部分手机是因特尔部分是高通&#xff0c;今天有人在社交媒体发布了iPhone12的基带从中可以看出本次iPhone12采用的是高通的X55基带&#xff…

android备份基带,备份过SHSH,保留基带,直刷5.0.1系统完美详细教程

此教程仅适用于备份SHSH直刷任何高于现手机版本的任何系统&#xff0c;我的系统是4.3.3直刷到5.0.1.可能刷法不同&#xff0c;我的用电量貌似没有增加&#xff0c;依然比较省电,没有大家说的掉电突然增加的现象。而且&#xff0c;刷完5.0.1&#xff0c;我的3G开关也依然存在&am…

苹果或方案自立研制iPhone基带芯片

据业界人士称&#xff0c;苹果方案组成一支新的研制团队去开发基带处理器&#xff0c;那些基带处理器将被用于它方案在2015年发布的新款iPhone中。知情人士还说&#xff0c;苹果方案将基带芯片的订单交给三星电子和Globalfoundries。 尽管某些知情人士还说&#xff0c;苹果或许…

使用Easy Chm制作chm文档步骤

前言 软件发布后需要相应的文档说明&#xff0c;CHM是微软新一代的帮助文件格式&#xff0c;利用HTML作源文&#xff0c;把帮助内容以类似数据库的形式编译储存。因为使用方便&#xff0c;形式多样也常被采用作为电子书的格式&#xff1b; 制作类似的chm文档可以使用Easy Chm软…

JWT 技术的使用

应用场景&#xff1a;访问某些页面&#xff0c;需要用户进行登录&#xff0c;那我们如何知道用户有没有登录呢&#xff0c;这时我们就可以使用jwt技术。用户输入的账号和密码正确的情况下&#xff0c;后端根据用户的唯一id生成一个独一无二的token&#xff0c;并返回给前端&…

bindService的调用流程

使用bindService去调用service&#xff0c;如果有多个客户端调用&#xff0c;onBind方法只会被调用一次&#xff0c;由于bindService嗲处理中&#xff0c;AMS是一个中间商&#xff0c;猜测这个处理也是AMS里进行的&#xff0c;这里我们再看看bindService的调用流程 public clas…

【翻译】开发人员的技术写作

HTML、CSS、JavaScript、Python、PHP、C、Dart--有这么多的编程语言&#xff0c;你甚至可能完全精通其中的几种但是&#xff0c;当我们的目标是写出更多、更好的代码时&#xff0c;我们用日常语言写作和交流的方式变得越来越重要......甚至可能被忽略了。 我们写代码和围绕代码…

AIGC用于智能写作的技术综述-达观数据

导语 图1. ChatGPT生成的关于智能写作的介绍 智能写作指使用自然语言处理技术来自动生成文本内容。这种技术通过分析给定语料库&#xff0c;学习文本的结构和语法&#xff0c;然后利用这些信息来生成新的文本。智能写作可以用来快速生成高质量的文本内容&#xff0c;并且可…

玩转ChatGPT:论文辅助写作(附Claude测评)

一、写在前面 嘿&#xff01;嘿&#xff01;嘿&#xff01;大家好&#xff0c;今天我们来聊一下使用GPT们进行论文辅助写作。不过&#xff0c;我要先交代一下&#xff0c;GPT的使用门槛比较高&#xff0c;不少童鞋都用不上。所以&#xff0c;我极力推荐一个平替产品——Claude…

帮你的英文写作一键纠错,微软升级版AI批改软件有这些亮点

你的英语还好吗&#xff1f; 学英语时&#xff0c;“听说读写”是四大核心要素&#xff0c; 而“写”可谓是英语学习中最考验学习者综合语言运用能力的一项。 在写作的时候&#xff0c;你会面临写错、单词匮乏以及语法错误等诸多问题&#xff0c;但如果让你自己或者找别人修改…