二叉树的中序遍历以及应用场景
这里写自定义目录标题
- 定义
- 题目
- 实现
定义
中序遍历(LDR)是二叉树遍历的一种,也叫做中根遍历、中序周游。在二叉树中,中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。
题目
给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
1
2
/
3
输出: [1,3,2]
实现
public class BinaryTree_中序遍历 {public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val = x; }}/*** 递归实现*/class Solution_by_recursion {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();getResult(root,list);return list;}//递归private void getResult(TreeNode root,List<Integer> list){if(root != null){if (root.left != null){getResult(root.left,list);}list.add(root.val);if(root.right != null){getResult(root.right,list);}}}/*** 复杂度分析时间复杂度:O(n)O(n)。递归函数 T(n) = 2 \cdot T(n/2)+1T(n)=2⋅T(n/2)+1。空间复杂度:最坏情况下需要空间O(n)O(n),平均情况为O(\log n)O(logn)。*/}/*** 栈实现*/class Solution_by_stack {//栈遍历public List<Integer> inorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();Stack<TreeNode> stack = new Stack<>();TreeNode current = root;while (current != null || !stack.empty()){while (current != null){stack.push(current);current = current.left;}current = stack.pop();list.add(current.val);current = current.right;}return list;}/**** 复杂度分析时间复杂度:O(n)O(n)。空间复杂度:O(n)O(n)。*/}public static void main(String[] args) {//输入: [1,null,2,3]BinaryTree_中序遍历 br = new BinaryTree_中序遍历();TreeNode tn1 = br.new TreeNode(1);TreeNode tn2 = br.new TreeNode(2);TreeNode tn3 = br.new TreeNode(3);tn1.right = tn2;tn2.left = tn3;//递归Solution_by_recursion recursion = br.new Solution_by_recursion();List<Integer> list_1 = recursion.inorderTraversal(tn1);System.out.println("=============递归=============");for (Integer v : list_1) {System.out.println(v);}//栈System.out.println();System.out.println();System.out.println();System.out.println("=============栈=============");Solution_by_stack stack = br.new Solution_by_stack();List<Integer> list_2 = stack.inorderTraversal(tn1);for (Integer v : list_2) {System.out.println(v);}}
}# 应用场景
可以用来做表达式树,在编译器底层实现的时候用户可以实现基本的加减乘除,比如 a*b+c
二叉树的中序遍历以及应用场景相关推荐
- 《LeetCode力扣练习》第94题 二叉树的中序遍历 Java
<LeetCode力扣练习>第94题 二叉树的中序遍历 Java 一.资源 题目: 给定一个二叉树的根节点 root ,返回它的 中序 遍历. 示例 1: 输入:root = [1,nul ...
- 树结构练习——排序二叉树的中序遍历(二叉搜索树)
树结构练习--排序二叉树的中序遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是--(1).每 ...
- LeetCode-二叉树-94. 二叉树的中序遍历
描述 94. 二叉树的中序遍历 给定一个二叉树的根节点 root ,返回它的 中序 遍历. 示例 1: 输入:root = [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root ...
- 树结构练习——排序二叉树的中序遍历
树结构练习--排序二叉树的中序遍历 Description 在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是--(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的 ...
- LeetCode 92反转链表Ⅱ93复制ip地址94二叉树的中序遍历
微信搜一搜:bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打卡群,欢迎 ...
- lintcode:二叉树的中序遍历
题目: 二叉树的中序遍历 给出一棵二叉树,返回其中序遍历 样例 给出二叉树 {1,#,2,3}, 1\2/3 返回 [1,3,2]. 挑战 你能使用非递归算法来实现么? 解题: 程序直接来源 Java ...
- 二叉树的中序遍历非递归方法(算法导论第三版12.1-3)
二叉树的中序遍历非递归方法(算法导论第三版12.1-3) 1⃣️用栈实现 template<typename T> void inorder_tree_walk_non_recursion ...
- leetcode - 94. 二叉树的中序遍历
给定一个二叉树,返回它的中序遍历.中序遍历(LDR)是二叉树遍历的一种,也叫做中根遍历.中序周游.在二叉树中,中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树. 示例: 进阶: 递归算法很简单, ...
- LeetCode-94. 二叉树的中序遍历
题目描述: 给定一个二叉树的根节点 root ,返回它的 中序 遍历. 输入:root = [1,null,2,3] 输出:[1,3,2] 思路分析: 用递归或是迭代算法来解决. 递归: 首先我们需要 ...
最新文章
- linux用户在哪个文件夹,LINUX中用命令成功建立一个用户后信息会记录在哪个文件中...
- [转载]为什么mysql用的是B+树?
- Leetcode24.Swap Nodes in Pairs两两交换链表中的节点
- 李彦宏的文字游戏:百度10篇论文被自然语言处理顶级会议ACL 2019录用
- 2.Java之路(Java语言开发环境搭建)
- 在最美好的年华里,不要辜负最美的自己
- 诗与远方:无题(四十一)
- mybatis的动态sql及模糊查询
- SEO HTML语义化
- backports移植rtlwifi驱动
- WinForm 圆形进度条CircularProgressBar
- 字节跳动python面试题校招_字节跳动校招----编程题(Python)
- android app 尺寸,Android APP标注尺寸入门教程和app标注工具
- 颜色科学与计算机测色配色实用技术,颜色科学与计算机测色配色实用技术
- 一个牛人的经历---北京八年——从极度贫困到财务自由
- 微信小程序-找地儿住-官方文档
- AI智能语音电销机器人能高效取代繁杂的电话工作
- 联想微型计算机c365,联想C365一体机如何用u盘重装系统
- LMG3422R030RQZR 600V GaN晶体管LMG3425R030RQZR电路图
- ylbtech-公司-滴滴出行:滴滴出行