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

【算法刷题day14】Leetcode:144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历

文章目录

    • 二叉树递归遍历
      • 解题思路
      • 代码
      • 总结
    • 二叉树的迭代遍历
      • 解题思路
      • 代码
      • 总结
    • 二叉树的统一迭代法
      • 解题思路
      • 代码
      • 总结

草稿图网站
java的Deque

二叉树递归遍历

题目:
144.二叉树的前序遍历
94.二叉树的中序遍历
145.二叉树的后序遍历
解析:代码随想录解析

解题思路

递归遍历
前序:NLR
中序:LNR
后序:LRN

代码

/*** 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> res = new ArrayList<Integer>();preorder(root, res);return res;}public void preorder(TreeNode root, List<Integer> res){if (root == null)return;res.add(root.val);preorder(root.left, res);preorder(root.right, res);}
}//中序
class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();inorder(root, res);return res;}public void inorder(TreeNode root, List<Integer> res){if (root == null)return;inorder(root.left, res);res.add(root.val);inorder(root.right, res);}
}
//后序
class Solution {public List<Integer> postorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();postorder(root, res);return res;}public void postorder(TreeNode root, List<Integer> res){if (root == null)return;postorder(root.left, res);postorder(root.right, res);res.add(root.val);}
}

总结

暂无

二叉树的迭代遍历

题目:
144.二叉树的前序遍历
94.二叉树的中序遍历
145.二叉树的后序遍历
解析:代码随想录解析

解题思路

前序:利用一个栈,每次出栈并入栈。
中序:利用一个栈,cur指向root节点,一直走左子树并入栈到空;cur为空时输出栈顶的val,然后使cur指向出栈节点右子树,重复上述步骤。
后序:LRN反过来是NRL,也就是前序换一下,最后倒转一下。

代码

/*** 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> res = new ArrayList<Integer>();if (root == null)return res;Stack<TreeNode> stack = new Stack<TreeNode>();stack.push(root);while(!stack.isEmpty()){TreeNode tmp = stack.pop();res.add(tmp.val);if (tmp.right != null)stack.push(tmp.right);if (tmp.left != null)stack.push(tmp.left);}return res;}
}//中序
class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();if (root == null)return res;Stack<TreeNode> stack = new Stack<TreeNode>();TreeNode cur = root;while (!stack.isEmpty() || cur != null){if (cur != null){stack.push(cur);cur = cur.left;}else{cur = stack.pop();res.add(cur.val);cur = cur.right;}}return res;}
}//后序
class Solution {public List<Integer> postorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();if (root == null)return res;Stack<TreeNode> stack = new Stack<TreeNode>();stack.push(root);while(!stack.isEmpty()){TreeNode tmp = stack.pop();res.add(tmp.val);if (tmp.left != null)stack.push(tmp.left);if (tmp.right != null)stack.push(tmp.right);}Collections.reverse(res);return res;}
}

总结

死去的408记忆在攻击我

二叉树的统一迭代法

题目:
144.二叉树的前序遍历
94.二叉树的中序遍历
145.二叉树的后序遍历
解析:代码随想录解析

解题思路

代码结构和递归遍历相似。下面是模拟步骤图
前序
在这里插入图片描述

中序
在这里插入图片描述

后序:
在这里插入图片描述

代码

/*** 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> res = new ArrayList<Integer>();if (root == null)return res;Stack<TreeNode> stack = new Stack<TreeNode>();stack.push(root);while(!stack.isEmpty()){TreeNode node = stack.peek();if (node != null){stack.pop();if (node.right != null) stack.push(node.right);if (node.left != null)  stack.push(node.left);stack.push(node);stack.push(null);    }else{stack.pop();node = stack.pop();res.add(node.val);}}return res;}
}//中序
class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();if (root == null)return res;Stack<TreeNode> stack = new Stack<TreeNode>();stack.push(root);while(!stack.isEmpty()){TreeNode node = stack.peek();if (node != null){stack.pop();if (node.right != null) stack.push(node.right);stack.push(node);stack.push(null); if (node.left != null)  stack.push(node.left);}else{stack.pop();node = stack.pop();res.add(node.val);}}return res;}
}//后序
class Solution {public List<Integer> postorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();if (root == null)return res;Stack<TreeNode> stack = new Stack<TreeNode>();stack.push(root);while(!stack.isEmpty()){TreeNode node = stack.peek();if (node != null){stack.pop();stack.push(node);stack.push(null); if (node.right != null) stack.push(node.right);if (node.left != null)  stack.push(node.left);}else{stack.pop();node = stack.pop();res.add(node.val);}}return res;}
}

总结

感觉记住了,感觉。

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

相关文章:

  • mysql闲谈
  • 物联网学习1、什么是 MQTT?
  • 【机器学习】数据探索(Data Exploration)---数据质量和数据特征分析
  • 软件测试(一)--简介+主流技能+分类+模型+流程
  • 技术引领,策略升级:腾讯云与你共探数字金融新篇章
  • 数据库-root密码丢失的重置方案(win11环境)
  • 免试生常问的一些问题汇总---专升本学习篇
  • FPGA的就业前景
  • 7.阻塞模式与非阻塞模式
  • Unity类银河恶魔城学习记录11-10 p112 Items drop源代码
  • EasyExcel 模板导出excel、合并单元格及单元格样式设置。 Freemarker导出word 合并单元格
  • 炫我科技:云渲染领域的佼佼者
  • VsCode正确解决vue3+Eslint+prettier+Vetur的配置冲突
  • 计算机网络—VLAN 间路由配置
  • 微服务篇-C 深入理解第一代微服务(SpringCloud)_VII 深入理解Swagger接口文档可视化管理工具
  • 区块链的应用领域:重塑未来的信任机制
  • 怎么在循环List的时候删除List的元素
  • SpringBoot+thymeleaf完成视频记忆播放功能
  • ES 7.12官网阅读-ILM(index lifecycle management)
  • Jenkins执行策略(图文讲解)
  • 1,static 关键字.Java
  • 网络语义实体对齐(Entity Alignment)相关论文与数据集整理
  • 【自动装箱以及包装类的缓存】⭐️通过具体案例看下每种包装类的不同结果
  • Java(内部类)
  • c++对象指针
  • js 拼接HTML时 onclick方法和传参报错[onject Object] 和 unexpected end of input`
  • 基于springboot实现定时任务,并且添加Event事件处理机制
  • 深入理解数据结构(1):复杂度详解
  • kette介绍-Step之Merge Join
  • 通俗易懂:MySQL中如何设置只读实例并确保数据一致性?