/***************************************************
* BreadthFirst()
* 广度优先遍历,自顶向下,自左向右,利用队列先进先出
***************************************************/
public void BreadthFirst()
{
Node p=rootNode;
LinkedList<Node> list=new LinkedList<Node>();//链表存储未访问过的节点
if(p!=null)
{
list.add(p);//首先将根节点加入队列
while(!list.isEmpty())//非空
{
p=list.poll();//弹出队列头部元素,并判断有没字节点,有的话就加入队列中
System.out.println(p.data);
if(p.left!=null)
{
list.add(p.left);
}
if(p.right!=null)
{
list.add(p.right);
}
}
}
}
/**
* 前序遍历 访问顺序:中-左-右(从根节点开始开始访问)
* @param node
*/
public void preOrder(Node node){
if(node != null){
System.out.println(node.data);
preOrder(node.left);
preOrder(node.right);
}
}
public void iterativePreorder(Node node)
{
Node p=node;
Stack<Node> stack=new Stack<Node>();
if(p!=null)
{
stack.push(p);
while(!stack.isEmpty())
{
p=stack.pop();
System.out.println(p.data);
//由于栈是---先进后出
if(p.right!=null)
{
stack.push(p.right);
}
if(p.left!=null)
{
stack.push(p.left);
}
}
}
}
/**
* 中序遍历 访问顺序:左-中-右(从最左边的叶子节点开始)
* @param node
*/
public void inOrder(Node node){
if(node != null)
{
inOrder(node.left);
System.out.println(node.data);
inOrder(node.right);
}
}
/**
* 后序遍历 访问顺序:左-右-中(从最左边的叶子节点开始访问,根节点最后访问)
* @param node
*/
public void postOrder(Node node){
if(node != null)
{
postOrder(node.left);
postOrder(node.right);
System.out.println(node.data);
}
}
二叉树遍历
最新推荐文章于 2018-12-02 14:15:16 发布