当前位置: 首页 > news >正文

【力扣】—— 二叉树的前序遍历、字典序最小回文串

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~
🌱🌱个人主页:奋斗的明志
🌱🌱所属专栏:数据结构

在这里插入图片描述

📚本系列文章为个人学习笔记,在这里撰写成文一为巩固知识,二为展示我的学习过程及理解。文笔、排版拙劣,望见谅。

在这里插入图片描述

力扣

  • 一、二叉树的前序遍历
    • 1. 题目
    • 2. 递归求解
    • 3. 迭代求解
  • 二、字典序最小回文串
    • 1.题目
    • 2.双指针实现

一、二叉树的前序遍历

二叉树的前序遍历


1. 题目


在这里插入图片描述


在这里插入图片描述


2. 递归求解


  • 前序遍历:根 —> 左子树 —> 右子树
  • 先访问根节点,然后再分别对当前根节点的左子树和右子树重复同样的操作。
  • 中序遍历和后序遍历也都是类似的,由此可以看出二叉树遍历本身就具有递归的性质。

在这里插入图片描述

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

/*** 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 {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> ret = new ArrayList<>();// 进行递归preorder(root, ret);return ret;}public void preorder(TreeNode root, List<Integer> ret) {if(root == null){return ;}//处理根节点ret.add(root.val);//处理左子树preorder(root.left,ret);//处理右子树preorder(root.right,ret);}
}

3. 迭代求解


  • 代码一:
/*** 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 {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> ret = new ArrayList<>();if (root == null) {return ret;}Stack<TreeNode> stack = new Stack<>();TreeNode cur = root;stack.push(cur);while (!stack.isEmpty()) {// 取出栈顶元素TreeNode tmp = stack.pop();ret.add(tmp.val);if (tmp.right != null) {stack.push(tmp.right);}if (tmp.left != null) {stack.push(tmp.left);}}return ret;}
}

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

  • 代码二:
/*** 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 {// 非递归实现public List<Integer> preorderTraversal(TreeNode root) {// 创建一个 List 存储结果List<Integer> ret = new ArrayList<>();if(root == null){return ret;}// 利用栈模拟实现// 创建一个栈 先进后出Stack<TreeNode> s = new Stack<>();TreeNode cur = root;while(cur != null || !s.isEmpty()){while(cur != null){s.push(cur);ret.add(cur.val);cur = cur.left;}//弹出栈顶元素TreeNode tmp = s.pop();cur = tmp.right;}return ret;}
}

二、字典序最小回文串

字典序最小回文串


1.题目


在这里插入图片描述


2.双指针实现

  • 可以使用双指针对给定的字符串 s 进行遍历。
  • 初始时,两个指针 left 和 right 分别指向 s 的首尾。
  • 在遍历的过程中,left 每次向右移动一个位置,right 每次向左移动一个位置,这样一来,它们总是指向在最终回文字符串中必须相同的两个字母
  • 会有以下两种情况:
  • 如果它们指向的字母相同,我们无需进行任何操作。当两个指针指向同一个位置时,也属于这一种情况;
  • 如果它们指向的字母不同,由于需要尽可能少的操作,我们会把其中一个字母修改成与另一个字母相同。
  • 对于这一次操作,我们需要让最终字符串的字典序最小,因此我们应当贪心地将字典序较大的字母改成与字典序较小的字母相同。
class Solution {public String makeSmallestPalindrome(String s) {//转换为数组char[] array = s.toCharArray();int left = 0,right = array.length - 1;while(left < right){if(array[left] != array[right]){char tmp = (char)Math.min(array[left],array[right]);array[left] = tmp;array[right] = tmp;}left++;right--;}return new String(array);}
}

在这里插入图片描述

在这里插入图片描述

http://www.lryc.cn/news/496603.html

相关文章:

  • linux替换更高版本gcc
  • 在Java中使用Apache POI导入导出Excel(六)
  • `uni.setClipboardData` 是 uni-app 提供的一个 API 设置系统剪贴板的内容
  • 【大模型微调】pdf转markdown
  • Vue 3 结合 TypeScript基本使用
  • Trotter steps的复杂性分析
  • mean,median,mode,var,std,min,max函数
  • JavaScript实现tab栏切换
  • 精确电压输出,家电和工业设备的完美选择,宽输入电压线性稳压器
  • 深入理解定时器:优先队列与时间轮实现
  • autogen-agentchat 0.4.0.dev8版本的安装
  • JAVA |日常开发中读写XML详解
  • React 路由与组件通信:如何实现路由参数、查询参数、state和上下文的使用
  • 帮我写一篇关于AI搜索网页上编写的文章是否存在版权问题的文章, 字数在 3000 字左右。文心一言提问, 记录后用.
  • 电脑关机的趣味小游戏——system函数、strcmp函数、goto语句的使用
  • AttributeError: ‘DataFrame‘ object has no attribute ‘append‘的参考解决方法
  • java垃圾回收机制介绍
  • SpringMVC跨域问题解决方案
  • 【语音识别】Zipformer
  • vue+uniapp+echarts的使用(H5环境下echarts)
  • 【Python网络爬虫笔记】7-网络爬虫的搜索工具re模块
  • 为什么选择 React Native 作为跨端方案
  • 服务器与普通电脑有什么区别?
  • Oracle 12c Data Guard 环境中的 GAP 修复方法
  • 力扣 三角dp
  • SQL基础语法全解析(上篇)
  • 【笔记】Linux服务器端使用百度网盘
  • UEFI Spec 学习笔记---3 - Boot Manager(3)
  • ATTCK红队评估实战靶场(四)
  • Android Studio 历史版本下载