n node = stack.pop(); // 输出节点值 System.out.print(node.val + " "); // 先将右子节点入栈,因为栈是后进先出,保证顺序 if (node.right != null) { stack.push(node.right); } // 再将左子节点入栈 if (node.left != null) { stack.push(node.left); } } }四、中序遍历(左子树,根节点,右子树)1、递归实现:中序遍历的递归方式与前序类似,只是顺序变为左子树、根节点、右子树。private static void inOrderTraversal0(TreeNode root) { if (root == null) { return; } // 首先遍历左子树 inOrderTraversal0(root.left); // 打印根节点 System.out.print(root.val + " "); // 最后遍历右子树 inOrderTraversal0(root.right); }2、迭代实现:迭代方式通常使用栈,与前序遍历不同的是,先将左子节点入栈,再处理右子节点。private static void inOrderTraversal1(TreeNode root) { if (root == null) { return; } Stack<TreeNode> stack = new Stack<>(); TreeNode curr = root; while (curr != null || !stack.isEmpty()) { while (curr != null) { stack.push(curr); curr = curr.left; } curr = stack.pop(); System.out.print(curr.val + " "); curr = curr.right; } }五、后序遍历(左子树,右子树,根节点)后序遍历相对复杂,递归实现相对直观,但迭代实现需要考虑更多的细节。1、递归实现:后序遍历的递归方式需要维护一个临时数组来记录访问过的节点,确保左右子树都被访问后再访问根节点。private static void postOrderTraversal0(TreeNode root) { if (root == null) { return; } postOrderTraversal0(root.left); postOrderTraversal0(root.right); // 最后打印根节点 System.out.print(root.val + " "); }2、迭代实现:迭代方法通常使用两个栈,一个用于存储待访问的节点,另一个用于暂存已访问的节点,以确保后序遍历的顺序。private static void postOrderTraversal1(TreeNode root) { if (root == null) { return; } Stack<TreeNode> stack1 = new Stack<>(), stack2 = new Stack<>(); stack1.push(root); while (!stack1.isEmpty()) { TreeNode node = stack1.pop(); stack2.push(node); if (node.left != null) { stack1.push(node.left); } if (node.right != null) { stack1.push(node.right); } } while (!stack2.isEmpty()) { System.out.print(stack2.pop().val + " "); } }总结二叉树的遍历是数据结构中的基础操作,理解递归和迭代解法对于解决更复杂的二叉树问题至关重要。递归方法简洁明了,易于理解,但可能会导致较大的函数调用开销。而迭代方法通常效率更高,但实现起来可能更复杂。在实际应用中,应根据具体需求和场景选择合适的遍历方式。通过练习和理解这些基本的遍历方法,可以为解决其他二叉树问题打下坚实的基础。
剩余6页未读,继续阅读
- 粉丝: 92
- 资源: 22
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【开源证券-2024研报】公司首次覆盖报告:“药品+健康消费品”双轮驱动,滋补品牌焕新生.pdf
- 【银河期货-2024研报】银河期货有色金属衍生品日报.pdf
- 【万联证券-2024研报】传媒行业深度报告:数字营销新篇章:AI驱动下的业态革新.pdf
- 【瑞达期货-2024研报】加籽价格表现强劲,提振国内菜系走势.pdf
- java毕设项目之华府便利店信息管理系统(完整前后端+说明文档+mysql+lw).zip
- 【天风证券-2024研报】中央经济工作会议点评:货币宽松更确定.pdf
- 【中诚信国际-2024研报】首单数字人民币形式知识产权ABS发行,企业ABS发行规模下降.pdf
- 【华西证券-2024研报】流动性跟踪:存单还有补涨空间.pdf
- java毕设项目之火锅店管理系统(完整前后端+说明文档+mysql+lw).zip
- 【华泰期货-2024研报】燃料油日报:原油上涨低硫燃油进口需求弱于预期.pdf
- 【华西证券-2024研报】信用策略框架系列之一:信用债配置之季节性规律.pdf
- 【华创证券-2024研报】可转债周报20241211:存量待发转债仍可观,后续供给怎么看?.pdf
- 基于小程序的微信点餐系统小程序源代码(java+小程序+mysql+LW).zip
- java毕设项目之基于BS的老年人体检管理系统(完整前后端+说明文档+mysql+lw).zip
- 【华泰期货-2024研报】高硫燃油基本面偏紧有效,交割资源不足.pdf
- java毕设项目之基于HTML的问卷调查系统的设计与实现(完整前后端+说明文档+mysql+lw).zip