二叉树非递归遍历--前中后序
2022/1/4 6:07:44
本文主要是介绍二叉树非递归遍历--前中后序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
代码
public class BTreeTraverseMethods { static class TreeNode { private int val; private TreeNode left; private TreeNode right; public TreeNode(int val) { this.val = val; } } public static void preOrderTraverse(TreeNode root) { System.out.print("Pre-Order Traverse:"); Deque<TreeNode> stack = new LinkedList<>(); stack.push(root); while (!stack.isEmpty()) { TreeNode node = stack.pop(); System.out.print(node.val + " "); if (node.right != null) { stack.push(node.right); } if (node.left != null) { stack.push(node.left); } } System.out.println(); } public static void inOrderTraverse(TreeNode root) { System.out.print("In-Order Traverse:"); Deque<TreeNode> stack = new LinkedList<>(); TreeNode node = root; while (node != null || !stack.isEmpty()) { if (node != null) { stack.push(node); node = node.left; } else { TreeNode popElem = stack.pop(); System.out.print(popElem.val + " "); if (popElem.right != null) { node = popElem.right; } } } System.out.println(); } public static void postOrderTraverse(TreeNode root) { System.out.print("Post-Order Traverse:"); Deque<TreeNode> stack = new LinkedList<>(); stack.push(root); TreeNode pre = null, node; while (!stack.isEmpty()) { node = stack.peek(); // 出栈条件: 叶子结点 || (前序节点不为空 && (该节点没有右子树并且前序节点是左节点 || 该节点的右节点是前序节点)) if ((node.left == null && node.right == null) || (pre != null && (node.right == null && node.left == pre || node.right == pre))) { TreeNode popElem = stack.pop(); System.out.print(popElem.val + " "); pre = node; } else { if (node.right != null) { stack.push(node.right); } if (node.left != null) { stack.push(node.left); } } } System.out.println(); } public static void main(String[] args) { TreeNode head = new TreeNode(5); head.left = new TreeNode(2); head.right = new TreeNode(6); head.left.left = new TreeNode(1); head.left.right = new TreeNode(3); head.right.right = new TreeNode(8); preOrderTraverse(head); inOrderTraverse(head); postOrderTraverse(head); } }
结果
Pre-Order Traverse:5 2 1 3 6 8 In-Order Traverse:1 2 3 5 6 8 Post-Order Traverse:1 3 2 8 6 5
总结
- 二叉树遍历的思路很容易理解不做过多阐述.
- 二叉树的遍历以及它衍生的题目是面试中比较常见的手撕代码题, 例如判断是否为二叉排序树可以用中序是否有序来判断等.
这篇关于二叉树非递归遍历--前中后序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-19环境变量处理课程:新手入门教程
- 2024-09-19接口模块封装课程:新手入门指南
- 2024-09-19请求动作封装课程:新手入门教程
- 2024-09-19拖拽表格课程:新手入门指南
- 2024-09-19页面权限课程:新手必学的权限管理入门教程
- 2024-09-19如何正确主动登出课程:新手必读教程
- 2024-09-19Element-Plus课程:新手入门与初级教程
- 2024-09-19Token处理入门教程:新手必看指南
- 2024-09-19如何应对被动登出课程的情况:新手必读指南
- 2024-09-19打包优化课程:初学者的必备指南