二叉树的遍历(Java,前序、中序、后序、递归and非递归)
2013-10-09 23:23
531 查看
package com.cuitccol.claymore; import java.util.LinkedList; import java.util.Queue; import java.util.Stack; import java.util.ArrayList; import java.util.Map; public class BTree { private BinaryTreeNode root; /** * 前序递归 * @param current */ public void PreOrder(BinaryTreeNode current){ if(current!=null){ System.out.println(current.getInfo()); PreOrder(current.lchild); PreOrder(current.rchild); } } /** * 中序递归 * @param current */ public void inOrder(BinaryTreeNode current){ if(current!=null){ inOrder(current.lchild); System.out.println(current.getInfo()); inOrder(current.rchild); } } /** * 后序递归 * @param current */ public void postOrder(BinaryTreeNode current){ if(current!=null){ postOrder(current.lchild); postOrder(current.rchild); System.out.println(current.getInfo()); } } /** * 深度递归 * @param current * @return deep */ public int deepth(BinaryTreeNode current){ if(current == null){ return 0; }else{ int dep1 = deepth(current.lchild); int dep2 = deepth(current.rchild); return dep1>dep2?dep1+1:dep2+1; } } /** * 前序非递归 * @param current */ public void preOrderNonRecursive(BinaryTreeNode current){ Stack<BinaryTreeNode> stack = new Stack<BTree.BinaryTreeNode>(); while((current!=null)||(stack.isEmpty())){ if(current!=null){ System.out.println(current.getInfo()); stack.push(current); current = current.lchild; }else{ current = stack.peek(); stack.pop(); current = current.rchild; } } } /** * 中序非递归 * @param current */ public void inOrderNonRecursive(BinaryTreeNode current){ Stack<BinaryTreeNode> stack = new Stack<BTree.BinaryTreeNode>(); while((current!=null)||(stack.isEmpty())){ if(current!=null){ stack.push(current); current = current.lchild; }else{ current = stack.peek(); stack.pop(); System.out.println(current.getInfo()); current = current.rchild; } } } /** * 后续非递归 * @param current */ public void postOrderNonRecursive(BinaryTreeNode current){ Stack<BinaryTreeNode> stack = new Stack<BTree.BinaryTreeNode>(); while((current!=null)||(stack.isEmpty())){ if(current!=null){ current.isFirst = true; stack.push(current); current = current.lchild; }else{ current = stack.peek(); stack.pop(); if(current.isFirst){ current.isFirst = false; stack.push(current); current = current.rchild; }else{ System.out.println(current.getInfo()); current = null; } } } } public void bfs(BinaryTreeNode current){ Queue<BinaryTreeNode> queue = new LinkedList<BTree.BinaryTreeNode>(); while((current!=null)||queue.isEmpty()){ if(current!=null){ System.out.println(current.getInfo()); queue.add(current.lchild); queue.add(current.rchild); current = queue.poll(); }else{ current = queue.poll(); } } } public class BinaryTreeNode{ private BinaryTreeNode lchild = null; private BinaryTreeNode rchild = null; private int info; private boolean isFirst; public int getInfo() { return info; } public void setInfo(int info) { this.info = info; } } }
相关文章推荐
- java语言实现二叉树的前序、中序与后序遍历(递归与非递归)
- Java实现二叉树的递归构建及先序、中序、后序、层序遍历(递归和循环)
- 二叉树的前序、中序、后序(递归、非递归)遍历java实现
- Java实现二叉树的前序、中序、后序遍历(非递归方法)
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
- Java实现二叉树的前序、中序、后序、层序遍历(递归方法)
- 用java实现二叉树的前序、中序、后序、层次遍历(递归和非递归版)
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
- 二叉树的建树、遍历(先序、中序、后序、层次)(递归和非递归)--Java实现
- Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)
- java 实现二叉树的构建,先序,中序,后序,层次,递归,非递归的遍历
- 二叉树的先序,中序,后序非递归遍历【java】
- Java二叉树(三)--非递归的中序_先序_后序遍历二叉树
- 二叉树的先序、中序、后序遍历(递归 and 非递归)
- Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)
- Java实现二叉树的前序、中序、后序、层序遍历(递归方法)
- Java实现-二叉树先序,中序,后序遍历及递归,非递归遍历
- java语言实现二叉树的前序、中序与后序遍历(递归与非递归) 层次遍历
- Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)
- Java实现二叉树的前序、中序、后序遍历(递归方法)