数据结构学习笔记-二叉树的遍历(JAVA)
二叉树是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。
两种遍历:
递归遍历和层次遍历.
前序:根左右
中序:左根右
后序:左右根
public class Tree
{
public Tree mLeft;
public Tree mRight;
private Data mData;
public List<Tree> treeList = new ArrayList<Tree>();
public static final int MAX = 40;
// 层次遍历时保存各个节点
Tree[] elements = new Tree[MAX];
// 层次遍历时队首
int front;
// 层次遍历时队尾
int rear;
public Tree(Tree left, Tree right, Data data)
{
this.mLeft = left;
this.mRight = right;
this.mData = data;
}
public Tree(Tree left, Tree right, String data)
{
this.mLeft = left;
this.mRight = right;
this.mData = new Data(data);
}
// 前序遍历,根左右
public void preOrder(Tree parent)
{
if (parent == null)
return;
System.out.print(parent.mData.desc + " ");
preOrder(parent.mLeft);
preOrder(parent.mRight);
}
// 中序遍历,左根右
public void inOrder(Tree parent)
{
if (parent == null)
return;
inOrder(parent.mLeft);
System.out.print(parent.mData.desc + " ");
inOrder(parent.mRight);
}
// 后序遍历,左右根
public void postOrder(Tree parent)
{
if (parent == null)
return;
postOrder(parent.mLeft);
postOrder(parent.mRight);
System.out.print(parent.mData.desc + " ");
}
// 遍历treeList并生成下次要遍历的
public void layerOrder()
{
if (treeList.isEmpty())
return;
List<Tree> buff = new ArrayList<Tree>();
for (Tree t : treeList)
{
if (t != null)
{
System.out.print(t.mData.desc + " ");
buff.add(t.mLeft);
buff.add(t.mRight);
}
}
treeList.clear();
if (!buff.isEmpty())
{
treeList.addAll(buff);
layerOrder();
}
}
// 另外一种利用数组 层次遍历的实现
public void layerOrder1(Tree parent)
{
elements[0] = parent;
front = 0;
rear = 1;
while (front < rear)
{
if (elements[front].mData != null)
{
System.out.print(elements[front].mData.desc + " ");
if (elements[front].mLeft != null)
{
elements[rear++] = elements[front].mLeft;
}
if (elements[front].mRight != null)
{
elements[rear++] = elements[front].mRight;
}
front++;
}
}
}
public static class Data
{
public String desc;
public Data(String s)
{
this.desc = s;
}
@Override
public String toString()
{
return desc;
}
}
}
public class TreeMain
{
public static void main(String[] args)
{
Tree d = new Tree(null, null, "D");
Tree e = new Tree(null, null, "E");
Tree f = new Tree(null, null, "F");
Tree g = new Tree(null, null, "G");
Tree b = new Tree(d, e, "B");
Tree c = new Tree(f, g, "C");
Tree a = new Tree(b, c, "A");
a.preOrder(a);
System.out.println("");
a.inOrder(a);
System.out.println("");
a.postOrder(a);
System.out.println("");
a.treeList.add(a);
a.layerOrder();
}
}
猜你喜欢
转载自f059074251.iteye.com/blog/2199864
今日推荐
周排行