二叉树的中序遍历以及应用场景
这里写自定义目录标题
- 定义
- 题目
- 实现
定义
中序遍历(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] 思路分析: 用递归或是迭代算法来解决. 递归: 首先我们需要 ...
最新文章
- php删除指定符号,利用PHP删除特殊符号
- [Tomcat]Tomcat6和Tomcat7的区别
- tcpdump dns流量监控
- Linux 标准目录结构 FHS
- 常考数据结构与算法----给定一个二叉树和一个值 sum,请找出所有的根节点到叶子节点的节点值之和等于sum 的路径,
- Linux makefile中的= := ?=操作符
- SigmaStar SSD201 开源记录
- OpenGL相机控制之二
- php访问服务器文件路径,PHP与服务器文件系统的简单交互
- python内置函数大全,赶紧收藏!!
- mac vscode远程服务器
- linux进入Mysql 的Dos控制台,dos进入mysql的实现方法
- Java单例模式双检锁原理
- vscode 添加版权信息
- 带托管代码的infopath2007表单创建, 发布,应用(MOSS开发)
- 机器学习(Machine Learning and Data Mining)CS 5751——final复习记录(3)
- 斜线“\”与反斜线“/”应用场景的整理
- js将网页保存成图片
- 刀客羽朋面向对象pdf
- CentOS 8 清除 DNS 缓存的方法