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

94. 二叉树的中序遍历(递归+迭代)

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

解题思路: 

方法一:递归

中序遍历的操作定义为,若二叉树为空,则空操作,否则:

  1. 中序遍历左子树
  2. 访问根节点
  3. 中序遍历右子树

AC代码

/*** 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> inorderTraversal(TreeNode root) {List<Integer> result = new ArrayList<>();process(result,root);return result;}public void process(List<Integer> result ,TreeNode root){if (root==null){return;}//中序遍历左子树process(result,root.left);//访问根节点result.add(root.val);//中序遍历右子树process(result,root.right);}
}

 方法二:迭代,递归的循环版本,借助栈来完成递归,

如果root !=null 或者 stack的大小不为0,则循环执行:

  1. 如果root !=null,循环将节点和其左孩子入栈执行:
    1. stack.push(root):将root入栈
    2. root=root.left:继续将root的左孩子入栈
  2. 上面循环结束后,栈顶节点没有左孩子,此时可以访问该节点:
    1. root = stack.pop():
    2. result.add(root.val):该节点没有左孩子,可以访问该节点
  3. 令root = root.right:对该节点的右孩子继续执行上述操作,如果其右孩子有左孩子,将左孩子入栈 
/*** 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> inorderTraversal(TreeNode root) {List<Integer> result = new ArrayList<>();Deque<TreeNode> stack = new LinkedList<>();while (root!=null||!stack.isEmpty()){//遍历左子树while (root!=null){stack.push(root);root=root.left;}root = stack.pop();//访问根节点result.add(root.val);//遍历右子树root=root.right;}return result;}
}

 

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

相关文章:

  • UGUI交互组件Slider
  • JAVA经典百题之按位或运算符 `|的使用
  • C多线程编程- 近似求解π
  • YOLOV7量化第二步: 模型标定
  • 前端-uniapp-开发指南
  • Java集合类ArrayList的应用-杨辉三角的前n行
  • C语言-函数
  • 蓝桥杯 枚举算法 (c++)
  • Wordpress自定义小工具logo调用设置(可视化)
  • 面试常考数据结构:红黑树、B树、B+树各自适用的场景
  • Paddle GPU版本需要安装CUDA、CUDNN
  • MYSQL length函数
  • uniapp 在android手机上运行tab栏页面跳转问题
  • css3 hover效果
  • C语言char与short取反以及符号判断问题
  • Gpt-4多模态功能强势上线,景联文科技多模态数据采集标注服务等您来体验!
  • 【idea】 java: 找不到符号
  • Flink测试利器之DataGen初探 | 京东云技术团队
  • linux更换常用软件的默认缓存路径(.conda, .huggingface等)
  • Kafka消费者使用案例
  • SpringMVC全注解开发
  • 解决 android Cannot access ‘<init>‘: it is private in
  • 不容易解的题10.15
  • Megatron-LM GPT 源码分析(二) Sequence Parallel分析
  • DNA序列(DNA Consensus String, ACM/ICPC Seoul 2006, UVa1368) rust解法
  • 如何使用Jmeter进行http接口测试?
  • bash一行输入,多行回显demo脚本
  • IDEA spring-boot项目启动,无法加载或找到启动类问题解决
  • 【LeetCode刷题(数据结构与算法)】:完全二叉树的节点个数
  • 【代码随想录】算法训练营 第一天 第一章 数组 Part 1