小白水平理解面试经典题目leetcode 606. Construct String from Binary Tree【递归算法】

本文主要是介绍小白水平理解面试经典题目leetcode 606. Construct String from Binary Tree【递归算法】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Leetcode 606. 从二叉树构造字符串

题目描述

在这里插入图片描述

例子

在这里插入图片描述
在这里插入图片描述

小白做题

坐在自习室正在准备刷题的小白看到这道题,想想自己那可是没少和白月光做题呢,也不知道小美刷题刷到哪里了,这题怎么还没来问我,难道是王谦谦去做题了?

这时候黑长直女神突然进到教室过来问:小白,你看到二叉树题目了吗,这道606的题目,感觉描述的很复杂,好像是说树结构转换为字符串类型,你有什么好思路吗?

小白内心镇定:这机会不就来了吗,小美,听说阮经天的《周处除三害》上映了,有机会一起去看看吧?

在这里插入图片描述
哦,不是,题目描述意思说的简单一些。

这种题目我们首先把他进行下条件梳理,原来描述的是太复杂了,而且题目拽了一堆转悠名词,我们最好忽略它。
我们把之前的题目进行瘦身环节,你是风儿我是沙,让大片描述非走吧。
在这里插入图片描述

  • 给定二叉树的根,通过先序遍历的方式从二叉树构造一个由括号和整数组成的字符串,并返回。

  • 如果根的右节点为空,则省略空括号对,这不会影响二叉树的表示。

  • 如果左节点为空并且右节点有一个值,其中包含左节点的空括号,如果省略左节点,则会影响二叉树表示。

[1 null 2] --> 1(()(2)) 如果省略左侧 () 空括号,则会影响二叉树 1(2) --> 表示左节点为 2,右节点为 null

解题环节

树的题目我们首先按照递归的算法来考虑,另外很重要的一点,就是递归的终止条件。
所以我们要考虑根为null情况时候,是返回空字符串的
if (root == null) return “”
case 0:是要返回S字符串,这种条件下,左子树和右子树分别都是为空
case 1: 如果右子树为空,返回左子树字符串
正常返回左子树与右子树的值。

考虑好条件后,我们接下来考虑用StringBuilder来进行字符串的存储。

左子树的表达方式:String left = tree2str(root.left);
右子树的表达方式:String right = tree2str(root.right);

最后的重点来了,就是如果右子树为空,那么我们就返回空;如果不为空,那么我们就把右子树加入到string字符串中。

小美:小伙子,可以啊,这不仅进行了解题,阅读理解也有俩下子!不过电影票要你买单哦。

小白:没问题,谁叫为了“真爱”呢。
在这里插入图片描述

真正面试环节

面试官:你可以解答这道”从二叉树构造字符串“的题目吗,来看看你对树结构的理解。

小白:嘿嘿,这不巧了么这不是。
在这里插入图片描述

	public String tree2str(TreeNode root) {// 设置递归终结条件if(root == null) return "";StringBuilder sb = new StringBuilder();int val = root.val;// 递归方法,来找到左,右子树的值String left = tree2str(root.left);String right = tree2str(root.right);sb.append(val+"");// 只有当左右子树都为空的时候才能忽略左子树// 否则就需要加入左子树, 就算是没有值也需要加上sb.append((left.isEmpty() && right.isEmpty()) ? "" : "("+left+")");// 只有当右子树不为空的时候才加入右子树的值sb.append((right.isEmpty()) ? "" : "("+right+")");return sb.toString();}

小明:OK,完事儿,等着面试官来表扬自己吧。他肯定会说:小子,你是个好手!工位都给你准备好了,工资你说了算。

面试官:矮油,不错啊,不过你这能不能写个测试啊。

小明OS:今年这个找工市场,人言洛阳花似锦,偏我来时不逢春。。。不是,怎么还让我些test case 啊!
在这里插入图片描述

	public static void main(String[] args) {TreeNode root = new TreeNode(1);root.left = new TreeNode(2);root.right = new TreeNode(3);root.left.left = new TreeNode(4);tree2Str606 solution = new tree2Str606();String res = solution.tree2str(root);System.out.print(res + " ");}

小白:您好,面试官,这回可以了吧,我终于有钱请小美看电影了!
在这里插入图片描述

============================================================================
🍀🍀🍀🍀🍀🍀更多算法题解请看 面试数据结构与算法总结分类+leetcode目录【基础版】

编码道路漫漫,只要先看脚下的路,徐徐前进即可。

这篇关于小白水平理解面试经典题目leetcode 606. Construct String from Binary Tree【递归算法】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/760534

相关文章

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO