今天没有继续昨天安卓软件开发的学习(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("");
        }

}

  明天如果不出意外的话会继续安卓软件的开发学习。

posted on 2022-01-03 20:13  辰逸1  阅读(31)  评论(0编辑  收藏  举报