实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式
2018-03-10 21:17
861 查看
import java.util.Stack; public class C01_PreInPosTraversal { public static class Node{ public int value; public Node left; public Node right; public Node(int value){ this.value = value; } } ////////////////////////递归版本/////////////////////////// //递归实现先序遍历 public static void recursivePreOrder(Node head){ if(head==null){ return ; } System.out.print(head.value+" "); recursivePreOrder(head.left); recursivePreOrder(head.right); } //递归实现中序遍历 public static void recursiveInOrder(Node head){ if(head==null){ return ; } recursiveInOrder(head.left); System.out.print(head.value+" "); recursiveInOrder(head.right); } //递归实现后序遍历 public static void recursivePosOrder(Node head){ if(head==null){ return ; } recursivePosOrder(head.left); recursivePosOrder(head.right); System.out.print(head.value+" "); } ////////////////////////非递归版本/////////////////////////// //非递归版先序遍历 public static void unRecursivePreOrder(Node head){ if(head==null){ return ; } Stack<Node>stack = new Stack<Node>(); stack.push(head); while(!stack.isEmpty()){ head = stack.pop(); System.out.print(head.value+" "); if(head.right != null){//先压右子节点,再压左子节点0 stack.push(head.right); } if(head.left != null){ stack.push(head.left); } } System.out.println(); } //非递归版中序遍历 public static void unRecursiveInOrder(Node head){ if(head == null){ return ; } Stack<Node>stack = new Stack<Node>(); while(head!=null || !stack.isEmpty()){ if(head!=null){ stack.push(head); head = head.left; }else { head = stack.pop(); System.out.print(head.value+" "); head = head.right; } } System.out.println(); } //非递归版后序遍历 public static void unRecuesivePosOrder(Node head){ if(head == null){ return ; } Stack<Node>stack = new Stack<Node>(); stack.push(head); Stack<Node>resNodes = new Stack<Node>(); while(!stack.isEmpty()){ head = stack.pop(); resNodes.push(head); if(head.left!=null){ stack.push(head.left); } if(head.right != null){ stack.push(head.right); } } while(!resNodes.isEmpty()){ System.out.print(resNodes.pop().value+" "); } } //test public static void main(String[] args) { Node head = new Node(5); head.left = new Node(3); head.right = new Node(8); head.left.left = new Node(2); head.left.right = new Node(4); head.left.left.left = new Node(1); head.right.left = new Node(7); head.right.left.left = new Node(6); head.right.right = new Node(10); head.right.right.left = new Node(9); head.right.right.right = new Node(11); // recursive System.out.println("==============recursive============="); System.out.print("pre-order: "); recursivePreOrder(head); System.out.println(); System.out.print("in-order: "); recursiveInOrder(head); System.out.println(); System.out.print("pos-order: "); recursivePosOrder(head); System.out.println(); // unrecursive System.out.println("============unrecursive============="); System.out.print("pre-order: "); unRecursivePreOrder(head); System.out.print("in-order: "); unRecursiveInOrder(head); System.out.print("pro-order: "); unRecuesivePosOrder(head); //posOrderUnRecur2(head); } }
相关文章推荐
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- 用递归和非递归方式实现二叉树先序、中序和后序遍历
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现(转)
- 从递归的异同分析二叉树先序、中序、后序遍历共同流程并实现非递归方式的三种遍历。
- 用递归方式实现二叉树先序、中序、后序遍历
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- 分别用递归和非递归方式实现二叉树的先序、中序和后序遍历
- 二叉树的遍历 前序 中序 后序 分别实现递归和非递归遍历方式
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现(转)
- 探讨:C++实现链式二叉树(用非递归方式先序,中序,后序遍历二叉树)
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- 二叉树构建,先序,中序,后序遍历(以及非递归实现),广度优先遍历
- 二叉树先序、中序,后序遍历的递归和非递归实现
- 数据结构-二叉树(递归前序、中序、后序遍历;栈实现中序变量;二叉树镜像)
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树的先序、中序、后序遍历的递归和非递归实现