今天没有继续昨天安卓软件开发的学习(dddd),写了一个二叉树遍历的程序,如下:
package TraveralOfBinaryTree;
public class Node {//创建树
private int data;
private Node leftNode;
private Node rightNode;
public Node(int data,Node leftNode,Node rightNode){
this.data=data;
this.leftNode=leftNode;
this.rightNode=rightNode;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getLeftNode() {
return leftNode;
}
public void setLeftNode(Node leftNode) {
this.leftNode = leftNode;
}
public Node getRightNode() {
return rightNode;
}
public void setRightNode(Node rightNode) {
this.rightNode = rightNode;
}
}
package TraveralOfBinaryTree;
public class BinaryTree {
public Node init(){
Node J=new Node(8,null,null);
Node H=new Node(4,null,null);
Node G=new Node(2,null,null);
Node F=new Node(7,null,J);
Node E=new Node(5,H,null);
Node D=new Node(1,null,G);
Node C=new Node(9,F,null);
Node B=new Node(3,D,E);
Node A=new Node(6,B,C);
return A;
}
public void printNode(Node node){
System.out.print(node.getData());
}//返回根节点
public void theFirstTraversal(Node root){//先序
printNode(root);
if(root.getRightNode()!=null){
theFirstTraversal(root.getRightNode());
}//遍历左孩子
if(root.getRightNode()!=null){
theFirstTraversal(root.getRightNode());
}//遍历右孩子
}
public void theInOrderTraversal(Node root){
if(root.getLeftNode()!=null){
theInOrderTraversal(root.getLeftNode());
}
printNode(root);
if(root.getRightNode()!=null){
theInOrderTraversal(root.getRightNode());
}
}//中序遍历
public void thePostTraversal(Node root){//后序
if(root.getRightNode()!=null){
thePostTraversal(root.getRightNode());
}//遍历左孩子
if(root.getRightNode()!=null){
thePostTraversal(root.getRightNode());
}//遍历右孩子
printNode(root);
}
public static void main(String[] args){
BinaryTree tree=new BinaryTree();
Node root=tree.init();
System.out.println("先序遍历");
tree.theFirstTraversal (root);
System.out.println("");
System.out.println("中序遍历");
tree.theInOrderTraversal (root);
System.out.println("");
System.out.println("后序遍历");
tree.thePostTraversal (root);
System.out.println("");
}
}
package TraveralOfBinaryTree;
import java.util.Stack;
public class BinaryTree1 {
public Node init(){
Node J=new Node(8,null,null);
Node H=new Node(4,null,null);
Node G=new Node(2,null,null);
Node F=new Node(7,null,J);
Node E=new Node(5,H,null);
Node D=new Node(1,null,G);
Node C=new Node(9,F,null);
Node B=new Node(3,D,E);
Node A=new Node(6,B,C);
return A;
}
public void printNode(Node node){
System.out.print(node.getData());
}//返回根节点
public void theFirstTraversal_Stack(Node root) {//先序
Stack<Node> stack=new Stack<Node>();
Node node=root;
while(node!=null||stack.size()>0){
if (node != null) {
printNode(node);
stack.push(node);//压栈
node=node.getLeftNode();
}else{
node=stack.pop();//出栈
node=node.getRightNode();
}
}}
public void theInOrderTraversal_Stack(Node root) {//中序
Stack<Node> stack=new Stack<Node>();
Node node=root;
while(node!=null||stack.size()>0){
if (node != null) {
stack.push(node);//压栈
node=node.getLeftNode();
}else{
node=stack.pop();//出栈
printNode(node);
node=node.getRightNode();
}
}}
public void thePostTraversal_Stack(Node root) {//后序
Stack<Node> stack=new Stack<Node>();
Stack<Node> output=new Stack<Node>();//构造栈存逆序结果
Node node=root;
while(node!=null||stack.size()>0){
if(node!=null){
output.push(node);
stack.push(node);
node=node.getRightNode();
}else{
node=stack.pop();
node=node.getLeftNode();
}
}
System.out.println(output.size());
while(output.size()>0){
printNode(output.pop());
}
}
public static void main(String[] args){
BinaryTree1 tree=new BinaryTree1();
Node root=tree.init();
System.out.println("先序遍历");
tree.theFirstTraversal_Stack (root);
System.out.println("");
System.out.println("中序遍历");
tree.theInOrderTraversal_Stack (root);
System.out.println("");
System.out.println("后序遍历");
tree.thePostTraversal_Stack(root);
System.out.println("");
}
}
明天如果不出意外的话会继续安卓软件的开发学习。
浙公网安备 33010602011771号