二叉树的先序、中序、后序、层次遍历的递归和非递归解法
2014-09-05 15:30
441 查看
二叉树的先序、中序、后序、层次遍历的递归和非递归解法
package tree; import java.util.LinkedList; import java.util.Queue; import java.util.Stack; public class TreeTraverse { /** * 先序递归 * @param root */ public static void preOrderTraverse(TreeNode root) { if (root == null) { return; } System.out.print(root.val + " "); preOrderTraverse(root.left); preOrderTraverse(root.right); } /** * 先序非递归 * @param root */ public static void preOrderTraverseNoR(TreeNode root) { if (root == null) { return; } Stack<TreeNode> st = new Stack<TreeNode>(); TreeNode pNode = root; while (pNode != null || !st.isEmpty()) { if (pNode != null) { System.out.print(pNode.val + " "); st.push(pNode); pNode = pNode.left; } else { pNode = st.pop(); pNode = pNode.right; } } } /** * 中序递归 * @param root */ public static void inOrderTraverse(TreeNode root) { if (root == null) { return; } inOrderTraverse(root.left); System.out.print(root.val + " "); inOrderTraverse(root.right); } /** * 中序非递归 * @param root */ public static void inOrderTraverseNoR(TreeNode root) { if (root == null) { return; } Stack<TreeNode> st = new Stack<TreeNode>(); TreeNode pNode = root; while (pNode != null || !st.isEmpty()) { if (pNode != null) { st.push(pNode); pNode = pNode.left; } else { pNode = st.pop(); System.out.print(pNode.val + " "); pNode = pNode.right; } } } /** * 中序递归 * @param root */ public static void postOrderTraverse(TreeNode root) { if (root == null) { return; } postOrderTraverse(root.left); postOrderTraverse(root.right); System.out.print(root.val + " "); } /** * 后序非递归 * @param root */ public static void postOrderTraverseNoR(TreeNode root) { if (root == null) { return; } Stack<TreeNode> st = new Stack<TreeNode>(); st.push(root); TreeNode pNode = null; TreeNode preNode = null; while (!st.isEmpty()) { pNode = st.peek(); // 如果当前节点没有子结点或者子结点被访问过 if ((pNode.left == null && pNode.right == null) || (preNode != null && (pNode.left == preNode || pNode.right == preNode))) { System.out.print(pNode.val + " "); preNode = st.pop(); } else { if (pNode.right != null) { st.push(pNode.right); } if (pNode.left != null) { st.push(pNode.left); } } } } /** * 层次遍历 * @param root */ public static void levelOrderTraverse(TreeNode root) { if (root == null) { return; } Queue<TreeNode> q = new LinkedList<TreeNode>(); q.offer(root); TreeNode pNode = null; while (!q.isEmpty()) { pNode = q.poll(); System.out.print(pNode.val + " "); if (pNode.left != null) { q.offer(pNode.left); } if (pNode.right != null) { q.offer(pNode.right); } } } public static void main(String[] args) { TreeNode node0 = new TreeNode(0); TreeNode node1 = new TreeNode(1); TreeNode node2 = new TreeNode(2); TreeNode node3 = new TreeNode(3); TreeNode node4 = new TreeNode(4); TreeNode node5 = new TreeNode(5); TreeNode node6 = new TreeNode(6); TreeNode node7 = new TreeNode(7); TreeNode node8 = new TreeNode(8); node1.left = node0; node4.left = node2; node4.right = node6; node2.left = node1; node2.right = node3; node6.left = node5; node6.right = node7; node7.right = node8; preOrderTraverse(node4); System.out.println(); preOrderTraverseNoR(node4); System.out.println(); inOrderTraverse(node4); System.out.println(); inOrderTraverseNoR(node4); System.out.println(); postOrderTraverse(node4); System.out.println(); postOrderTraverseNoR(node4); System.out.println(); levelOrderTraverse(node4); } }
相关文章推荐
- 二叉树2:层次遍历方式及先序、中序、后序(递归与非递归)遍历方式
- 数据结构(一)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 用java实现二叉树的前序、中序、后序、层次遍历(递归和非递归版)
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树的建树、遍历(先序、中序、后序、层次)(递归和非递归)--Java实现
- java 实现二叉树的构建,先序,中序,后序,层次,递归,非递归的遍历
- 采用二叉链表结构实现二叉树,并以递归遍历思想实现二叉树的创建、二叉树的遍历(先序、中序、后序和层次遍历)
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- c语言实现二叉树先序,中序,后序(递归),层次遍历,求叶子节点个数及树的深度,下一篇写非递归的遍历
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- C语言二叉树常见操作详解【前序,中序,后序,层次遍历及非递归查找,统计个数,比较,求深度】
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现