LeetCode 606. 根据二叉树创建字符串题解
606. 根据二叉树创建字符串题解
LeetCode 题解持续更新中Github仓库地址 CSDN博客地址
在开始本题之前,可以先看看这篇文章树的基本知识以及种种遍历方法。
本题目就是使用前序遍历,可以使用 递归的方法,和迭代的方法进行前序遍历(具体方法在链接里面树的基本知识以及种种遍历方法),同时在相应的地方添加括号
- 如果当前节点有两个子节点,则在两个子节点的外层添加括号
- 如果当前节点没有任何节点,则不需要添加任何的括号
- 如果当前节点只有左节点,则只在左节点的结果添加括号
- 如果当前节点只有右节点,则需要在前方添加一个
()
之后再添加节点的值
递归方法
class Solution {public:// 创建 一个空字符串,用来统计结果string res = "";string tree2str(TreeNode *root) {dfs(root);// 截取相应的字符串return res.substr(1, res.size() - 2);}// 创建递归函数void dfs(TreeNode *root) {// 如果节点是空的就跳出递归if (root == nullptr) return;// 将每次前序遍历都套上括号res += "(";// 并将相应的值加入到字符串中res += to_string(root->val);// 讨论各种情景if (root->left != nullptr) dfs(root->left);else if (root->right != nullptr) res += "()";if (root->right != nullptr) dfs(root->right);res += ")";}
};
class Solution {// 创建 一个空字符串,用来统计结果String res = "";public String tree2str(TreeNode root) {dfs(root);return res.substring(1, res.length() - 1);}// 创建递归函数public void dfs(TreeNode root) {// 如果节点是空的就跳出递归if (root == null) return;// 将每次前序遍历都套上括号res += "(";// 并将相应的值加入到字符串中res += Integer.toString(root.val);// 讨论各种情景if (root.left != null) dfs(root.left);else if (root.right != null) res += "()";if (root.right != null) dfs(root.right);res += ")";}
}
迭代
迭代的方法与树的前序遍历的迭代方法逻辑一样,
- 如果节点有两个子节点,则先将右节点放入栈中,再将左节点放入栈中
- 如果节点没有任何的子节点,就不对栈进行任何操作
- 如果只有一个左节点,就将左节点放入栈中
- 如果只有一个右节点,就先再结果末尾添加一对括号,再将右节点放入栈中
class Solution {public:string tree2str(TreeNode *root) {string res = "";// 创建栈用于存储各个节点用于模拟树的前序遍历stack<TreeNode *> st;// 放入头节点st.push(root);set<TreeNode *> visited;while (!st.empty()) {// 将当前节点放入栈中TreeNode *node = st.top();// 如果当前节点被访问过,说明以该节点为根节点的子树已经遍历完成if (!visited.count(node)) {// 添加括号,并且从栈中移除当前节点if (node != root) res += ")";st.pop();} else {// 如果没有被访问过,就开始添加新的括号,并将子节点加入栈中if (node != root) res += "(";res += node->val;if (node->left == nullptr && node->right != nullptr) res += "()";if (node->right != nullptr) st.push(node->right);if (node->left != nullptr) st.push(node->left);}}return res;}
};
class Solution {public String tree2str(TreeNode root) {String res = "";// 创建栈用于存储各个节点用于模拟树的前序遍历Deque<TreeNode> st = new ArrayDeque<TreeNode>();// 放入头节点st.push(root);Set<TreeNode> visited = new HashSet<>();while (!st.isEmpty()) {// 将当前节点放入栈中TreeNode node = st.peek();// 如果当前节点被访问过,说明以该节点为根节点的子树已经遍历完成if (!visited.add(node)) {// 添加括号,并且从栈中移除当前节点if (node != root) res += ")";st.pop();} else {// 如果没有被访问过,就开始添加新的括号,并将子节点加入栈中if (node != root) res += "(";res += node.val;if (node.left == null && node.right != null) res += "()";if (node.right != null) st.push(node.right);if (node.left != null) st.push(node.left);}}return res;}
}
LeetCode 606. 根据二叉树创建字符串题解相关推荐
- 【浅刷Java数据结构】Leetcode 606 根据二叉树创建字符串
链接: Leetcode 606 根据二叉树创建字符串 整体思路: 题目要求按照前序遍历的方式遍历.(根(左子树)(右子树)) 根为空直接返回. 根不为空时:看左右子树是否空,就可以分类讨论: 左树为 ...
- LeetCode 606. 根据二叉树创建字符串(递归)
文章目录 1. 题目 2. 递归解题 1. 题目 你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串. 空节点则用一对空括号 "()" 表示.而且你需要省略所 ...
- leetcode 606 .根据二叉树创建字符串
题目链接:leetcode606 题目链接 此题的题目虽然是简单题,但是想要读懂,个人感觉有些难度,虽然是简单题,但是想要读懂还有不小的难度的, 直接说结论,对着结论去读懂题目应该会简单不少. 结论: ...
- LeetCode:606.根据二叉树创建字符串
解题思路: 在前序遍历的基础上增加了一些步骤,分3个情况 无左右子树 无左子树,又右子树 有左子树无右子树 同时具有左右子树 对于每个情况,只需根据题意再各个地方加上括号即可,这里2.4为一种情况,同 ...
- 【LeetCode】606.根据二叉树创建字符串
链接: [LeetCode]606.根据二叉树创建字符串 思路 使用二叉树的中序遍历,需要注意的是当左节点为空,右节点不为空的时候要加上(). 代码 class Solution { public:s ...
- LeetCode Algorithm 606. 根据二叉树创建字符串
606. 根据二叉树创建字符串 Ideas 把我珍藏多年的二叉树前序遍历代码模板呈上来: def preorderTraversalLoop(node):if not node:returnstack ...
- LeetCode 每日一题:606. 根据二叉树创建字符串
606. 根据二叉树创建字符串 二叉树的前序遍历,当左子节点或者右节点非空的时候需要添加左子节点的括号,如果右子节点非空才需要添加右子节点的括号 /*** Definition for a binar ...
- 题目:606.根据二叉树创建字符串
题目来源: leetcode题目,网址:606. 根据二叉树创建字符串 - 力扣(LeetCode) 解题思路: 递归遍历二叉树,按要求输出即可. 解题代码: /*** Definition f ...
- 606.根据二叉树创建字符串
题目 606.根据二叉树创建字符串 题目大意 你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串. 空节点则用一对空括号 "()" 表示.而且你需要省略所有不 ...
最新文章
- 安装NodeJS环境报错
- 在Servlet中向客户端写Cookie信息
- HDU 3046 Pleasant sheep and big big wolf 最小割
- 简单计算器 逆波兰表达式
- boost::successive_shortest_path_nonnegative_weights用法的测试程序
- 6号团队-团队任务4:每日立会(2018-11-28)
- 推荐一款自动化代码变量命名在线工具
- 嵌入式linux实验一vim的使用,嵌入式Linux C语言开发工具—vi/vim实训操作
- 为何阿里开发手册中,线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式
- 决策树,随机森林,集成学习的算法实现
- html5font标签菜鸟教程,菜鸟教程
- 华为USG6000 防火墙默认设置
- JAVA输出100以内素数
- 工商银行近20年实时大数据平台建设历程
- NOIP2017提高成绩
- 使用LODOP设计打印模板
- OpenDDS开发人员指南中文版3.23(2)入门
- 数学教程之14本用于早期数学学习的精美插图儿童读物
- css3基础知识总结
- 怎样来实现数据接口的加密?
热门文章
- 却话文心一言(Chatgpt们),存算一体真能突破AI算力“存储墙”|“能耗墙”|“编译墙”?
- 工程技术人员以计算机为辅助工具,上海工程技术大学机械CADCAM考试复习资料
- BootLoader——嵌入式系统的引导加载程序
- U盘启动盘装Linux系统: 以Kali为例
- 查找文献必备的文献下载神器
- 三星N900刷机包 港版4.4.2精简 官方原汁原味 卡刷包
- PHP语言之华为应用内支付IAP验签
- 推荐收藏系列:一文理解JVM虚拟机(内存、垃圾回收、性能优化)解决面试中遇到问题(图解版)
- 【JavaScript】节点的常用属性和方法
- kafka日志清理策略,compact和delete