java树的非递归遍历_java实现二叉树的非递归遍历

package com.wyy.test;

import java.util.Stack;public classTransverseTreeWithoutDGTest {public static voidmain(String[] args){

Tree tree= newTree();

tree.insert("A", 30);

tree.insert("B", 42);

tree.insert("C", 19);

tree.insert("D", 22);

tree.insert("E", 33);

tree.insert("F", 45);

tree.insert("G", 20);

tree.preOrder(tree.root);

System.out.println();

tree.midOrder(tree.root);

System.out.println();

tree.lastOrder(tree.root);

System.out.println();

System.out.println("----------------------------");

Tree.postOrderWithStack(tree.root);

}

}classNode{publicString name;public intcount;publicNode leftChild;publicNode rightChild;public Node(String name,intcount){this.name =name;this.count =count;

}

}classTree{publicNode root;publicTree(){

root= null;

}public void insert(String name,intcount){

Node newNode= newNode(name,count);if(root==null)

root=newNode;else{

Node current=root;

Node parent;while(true){

parent=current;if(count

current=current.leftChild;if(current==null){

parent.leftChild=newNode;return;

}

}else if(count>current.count){

current=current.rightChild;if(current==null){

parent.rightChild=newNode;return;

}

}

}

}

}public Node find(intkey){

Node current=root;while(true){if(current==null)return null;if(key==current.count)returncurrent;else if(key

current=current.leftChild;

}else if(key>current.count){

current=current.rightChild;

}

}

}public voidpreOrder(Node node){if(node!=null){

System.out.print(node.name);

preOrder(node.leftChild);

preOrder(node.rightChild);

}

}public voidmidOrder(Node node){if(node!=null){

midOrder(node.leftChild);

System.out.print(node.name);

midOrder(node.rightChild);

}

}public voidlastOrder(Node node){if(node!=null){

lastOrder(node.leftChild);

lastOrder(node.rightChild);

System.out.print(node.name);

}

}public voidpreOrderWithStack(Node node){

Stack s = new Stack();

Node current=node;while(current!=null||!s.isEmpty()){while(current!=null){

System.out.print(current.name+" ");if(current.rightChild!=null){

s.push(current.rightChild);

}

current=current.leftChild;

}if(!s.isEmpty()){

current=s.pop();

}

}

}public voidinOrderWithStack(Node node){

Node current=node;

Stack s = new Stack();while(current!=null||!s.isEmpty()){while(current!=null){

s.push(current);

current=current.leftChild;

}if(!s.isEmpty()){

current=s.pop();

System.out.print(current.name+" ");

current=current.rightChild;

}

}

}public static voidpostOrderWithStack(Node node){

Node current;

Node pre= null;

Stack s= new Stack();

s.push(node);while(!s.isEmpty()){

current=s.peek();if((current.leftChild==null&&current.rightChild==null)||(pre!=null&&(pre==current.leftChild||pre==current.rightChild))){

System.out.print(s.pop().name);//如果节点的左右子节点都为null 或者都被遍历过则可以访问

pre =current;

}else{if(current.rightChild!=null)

s.push(current.rightChild);if(current.leftChild!=null)

s.push(current.leftChild);

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值