对二叉树进行前序、中序、后序遍历

来源:互联网 发布:网络剧的受众分析 编辑:程序博客网 时间:2024/06/06 03:34

前序遍历:

根节点---->左子树---->右子树

中序遍历:

左子树---->根节点---->右子树

后序遍历:

左子树---->右子树---->根节点


二叉树为:


二叉树相当于双向链表。左右都有结点


代码:

定义结点类

public class Node {
      public int data;      //自己本身值
      public Node left;     //左结点
      public Node right;     //右结点
      public Node() {
      }
      public Node(int data, Node left, Node right) {
           this.data = data;
           this.left = left;
           this.right = right;
       }
       public int getData() {
           return data;
       }
       public void setData(int data) {
            this.data = data;
       }
       public Node getLeft() {
            return left;
       }
       public void setLeft(Node left) {
            this.left = left;
       }
       public Node getRight() {
           return right;
       }
       public void setRight(Node right) {
           this.right = right;
       }
}



public class Tree {
      // 注意必须逆序建立,先建立子节点,再逆序往上建立,因为非叶子结点会使用到下面的节点,而初始化是按顺序初始化的,不逆序建立会报错
      public Node init() {
             Node a9 = new Node(9, null, null);
             Node a8 = new Node(8, null, null);
             Node a7 = new Node(7, null, null);
             Node a6 = new Node(6, null, null);
             Node a5 = new Node(5, null, null);
             Node a4 = new Node(4, a8, a9);
             Node a3 = new Node(3, a6, a7);
             Node a2 = new Node(2, a4, a5);
             Node a1 = new Node(1, a2, a3);
             return a1;      // 返回根节点
       }

        //打印结点值
        public void printNode(Node node) {
              System.out.print(node.getData() + " ");
        }
        //前序遍历,根-左-右,相当于 小于号<
        public void firstTraversal(Node node){
              printNode(node);      //每次打印的都是根节点的值
              if(node.getLeft() != null){
                     firstTraversal(node.getLeft());
              }
              if(node.getRight() != null){
                    firstTraversal(node.getRight());
              }
       }
       //中序遍历,左-根-右,相当于 尖括号^
       public void middleTraversal(Node node){
            if(node.getLeft() != null){
                  middleTraversal(node.getLeft());
            }
            printNode(node);     //每次打印的都是根节点的值
            if(node.getRight() != null){
                  middleTraversal(node.getRight());
            }
      }
      //后序遍历,左-右-根,相当于 大于号>
      public void endTraversal(Node node){
           if(node.getLeft() != null){
                endTraversal(node.getLeft());
           }
           if(node.getRight() != null){
                 endTraversal(node.getRight());
           }
           printNode(node);     //每次打印的都是根节点的值
     }
     public static void main(String[] args) {
          Tree tree = new Tree();
          Node node = tree.init();
          System.out.println("先序遍历");
          tree.firstTraversal(node);
          System.out.println("");
          System.out.println("中序遍历");
          tree.middleTraversal(node);
          System.out.println("");
          System.out.println("后序遍历");
          tree.endTraversal(node);
    }
}


结果为:

先序遍历
1 2 4 8 9 5 3 6 7 
中序遍历
8 4 9 2 5 1 6 3 7 
后序遍历
8 9 4 5 2 6 7 3 1 


0 0
原创粉丝点击