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

LeetCode 刷题【103. 二叉树的锯齿形层序遍历、104. 二叉树的最大深度、105. 从前序与中序遍历序列构造二叉树】

103. 二叉树的锯齿形层序遍历

自己做

解:先序遍历

/*** 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 {List<List<Integer>> res = new ArrayList();public void preTravelTree(TreeNode root, int level){if(root == null)return;if(res.size() == level){                //添加列表【新的一层】List<Integer> new_level = new ArrayList();new_level.add(root.val);res.add(new_level);}else{                                   //已有列表List<Integer> old_level = res.get(level);if(level % 2 == 1){                 //奇数层,头插old_level.addFirst(root.val);}else{                               //偶数层,尾插old_level.addLast(root.val);}}preTravelTree(root.left, level + 1);preTravelTree(root.right, level + 1);}public List<List<Integer>> zigzagLevelOrder(TreeNode root) {preTravelTree(root, 0);return res;}
}

104. 二叉树的最大深度

自己做

解:先序遍历

/*** 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 {private int min_level = 0;public void preTravelTree(TreeNode root, int level){if(root == null)return;if(level > min_level)min_level = level;preTravelTree(root.left, level + 1);preTravelTree(root.right, level + 1);}public int maxDepth(TreeNode root) {preTravelTree(root, 1);return min_level;}
}

105. 从前序与中序遍历序列构造二叉树

自己做

解1:划分回溯

/*** 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 {private int i = 0;public TreeNode inorderTravel(int[] preorder, int[] inorder, int begin, int end){if(begin > end)                                                         //到底了return null;TreeNode root = new TreeNode(preorder[i++]);                            //当前结点int mid = begin;                                                        //记录划分位置for(int j = begin; j <= end && preorder[i - 1] != inorder[mid]; j++)    //找划分位置mid++;TreeNode left = inorderTravel(preorder, inorder, begin, mid - 1);      //左子树TreeNode right = inorderTravel(preorder, inorder, mid + 1, end);       //右子树root.left = left;root.right =right;return root;}public TreeNode buildTree(int[] preorder, int[] inorder) {return inorderTravel(preorder, inorder, 0, preorder.length - 1);}
}

解2:哈希集合版

/*** 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 {private int i = 0;Map<Integer, Integer> m = new HashMap();                                     //构建键值对集合public TreeNode inorderTravel(int[] preorder, int[] inorder, int begin, int end){if(begin > end)                                                         //到底了return null;int mid = m.get(preorder[i]);                                           //获得分割点TreeNode root = new TreeNode(preorder[i++]);                            //当前结点TreeNode left = inorderTravel(preorder, inorder, begin, mid - 1);       //左子树TreeNode right = inorderTravel(preorder, inorder, mid + 1, end);        //右子树root.left = left;root.right =right;return root;}public TreeNode buildTree(int[] preorder, int[] inorder) {for(int i = 0; i < preorder.length; i++)m.put(preorder[i], 0);for(int i = 0; i < preorder.length; i++)m.put(inorder[i], i);return inorderTravel(preorder, inorder, 0, preorder.length - 1);}
}

http://www.dtcms.com/a/449953.html

相关文章:

  • joomla适合做什么网站弹性云主机做网站
  • 7.内置函数
  • 【深入理解计算机网络05】数据链路层:组帧,差错控制,流量控制与可靠传输
  • 夜神模拟器安装burp证书实现微信小程序抓包
  • 交互设计 网站推荐清美未来广告设计公司
  • 叮当快药网站谁做的网站改版 升级的目的
  • 佛山免费网站设计阿里云搭建wordpress
  • 大模型之用LLaMA-Factory微调Deepseek-r1-8b模型实践
  • 【C语言】寻找数组中唯一不重复的元素
  • 大数据成矿预测系列(三) | 从统计模型到机器学习:为何机器学习是成矿预测的新前沿?
  • UNIX下C语言编程与实践34-UNIX 守护进程:概念、特点与应用场景
  • 专项行业项目资源与源码
  • 《基于电阻抗断层成像的实时软触觉传感器中的深度神经网络方法》IROS2019论文解读
  • 网页设计第5次作业
  • 吃透大数据算法-霍夫曼编码(Huffman Coding)
  • 唐山自助建站软件app网站开发合同
  • 河北三河建设局网站哪个软件可以做明星视频网站
  • GESP2025年9月认证C++二级( 第三部分编程题(2)菱形)
  • 【大模型实战篇】AgentScope引入Sequential thinking mcp server实现顺序思考的React Agent
  • HashLfuCache
  • XSLFO 流:深入解析与实际应用
  • vscode 一键导出导入所有插件
  • 网站登录验证码显示不出来软件网站排名
  • 找人做一个网站要多少钱包头移动的网站建设
  • 网站设计师培训学校建网站建设网站
  • Linux 目录结构,远程登录 CentOS 服务器 和 远程文件传输 详解(Xshell, PuTTY, Xftp)
  • 外贸网站样式修改wordpress登陆后台
  • FFN、CNN和RNN对比
  • springboot3 怎么用@DS 实现多数据源
  • 平湖市住房建设局网站安全证四川省建设厅官方网站