# 二叉树遍历

class TreeNode

{

public T data;

public TreeNodeleft;

public TreeNoderight;

public TreeNode(T data, TreeNode left, TreeNode right)

{

this.data = data;

this.left = left;

this.right = right;

}

}

public class BinaryTree {

public static void main(String[] args) {

TreeNode D =new TreeNode<>("D",null,null);

TreeNode E =new TreeNode<>("E",null,null);

TreeNode F =new TreeNode<>("F",null,null);

TreeNode B =new TreeNode<>("B",D,null);

TreeNode C =new TreeNode<>("C",E,F);

TreeNode root =new TreeNode<>("A",B,C);

pre(root);

System.out.println();

mid(root);

System.out.println();

bac(root);

System.out.println();

}

//递归后序

private static void bac(TreeNode root) {

if(root !=null){

bac(root.left);

bac(root.right);

System.out.print(root.data+"  ");

}

}

//递归中序

private static void mid(TreeNode root) {

if(root !=null){

mid(root.left);

System.out.print(root.data+"  ");

mid(root.right);

}

}

//递归前序

private static void pre(TreeNode root) {

if(root !=null){

System.out.print(root.data+"  ");

pre(root.left);

pre(root.right);

}

}

//非递归后序

private static void baccir(TreeNode root) {

class NodeFlag{

TreeNodenode;

char tag;

public NodeFlag(TreeNode node, char tag) {

super();

this.node = node;

this.tag = tag;

}

}

Stack>> stack=new Stack>>();

TreeNode p=root;

NodeFlag> bt;

//栈不空或者p不空时循环

while(p!=null || !stack.isEmpty())

{

//遍历左子树

while(p!=null)

{

bt=new NodeFlag(p, 'L');

stack.push(bt);

p=p.left;

}

//左右子树访问完毕访问根节点

while(!stack.isEmpty() && stack.peek().tag=='R')

{

bt=stack.pop();

System.out.print(bt.node.data+"  ");

}

//遍历右子树

if (!stack.isEmpty())

{

bt=stack.peek();

bt.tag='R';

p=bt.node;

p=p.right;

}

}

}

//非递归中序

private static void midcir(TreeNode root) {

TreeNode p = root;

Stack> stack =new Stack<>();

while(p!=null||!stack.isEmpty()){

if(p!=null){

stack.push(p);

p = p.left;

}else {

p = stack.pop();

System.out.print(p.data+"  ");

p = p.right;

}

}

}

//非递归前序

private static void precir(TreeNode root) {

TreeNode p = root;

Stack> stack =new Stack<>();

while(p!=null||!stack.isEmpty()){

if(p!=null){

stack.push(p);

System.out.print(p.data+"  ");

p = p.left;

}else {

p = stack.pop();

p = p.right;

}

}

}

//逐层遍历

private static void printNode(TreeNode root) {

if(root!=null){

}

while(!queue.isEmpty()){

root = queue.getFirst();

System.out.print(root.data+"  ");

queue.removeFirst();

if(root.left!=null){

}

if(root.right!=null){

}

}

}

}

### 推荐阅读更多精彩内容

• 递归实现二叉树的遍历 class BinaryTree{ public int value; pu...
BrianAguilar阅读 363评论 1 2
• 姓名: 李小娜 [嵌牛导读] ：这篇文章主要介绍了Java二叉排序树，包括二叉排序树的定义、二叉排序树的性质、二叉...
n184阅读 395评论 0 0
• 二叉树的定义 二叉树(binary tree)是结点的有限集合，这个集合或者空，或者由一个根及两个互不相交的称为这...
飘颜阅读 194评论 0 2
• 12月28日 晴朗多寒 当我在本子上划出“山间清流”四个大字时，我觉得这是那么自然，像是早就存...
枫芒阅读 79评论 0 0
• 昨天看了一个演讲，对我触动很大。一个身体不健全的人如何从零做到千万的营业额，经历几沉几浮，我在想一个人究竟有多大的...
蓝色孤枫阅读 96评论 0 1