• 数据结构之二叉树java实现


    二叉树是一种非线性数据结构,属于树结构,最大的特点就是度为2,也就是每个节点只有一个左子树和一个右子树。二叉树的操作主要为创建,先序遍历,中序遍历,后序遍历。还有层次遍历。遍历有两种方式,一是采用递归的方式,二是采用转换为栈进行遍历,对二叉树的遍历本质上市将非线性结构转换为线性序列。

      1 package tree;
      2 
      3 import java.util.ArrayList;
      4 import java.util.List;
      5 import java.util.Queue;
      6 
      7 //通过先序方式将数组依次添加到二叉树
      8 public class CreateTreeByArray<E> {
      9     public static class Node<E>{
     10         Node<E> left = null;  //左子树
     11         Node<E> right = null; //右子树
     12         E data = null;          //数据域
     13         
     14         //初始化节点
     15         public Node(E data){
     16             this.data = data;
     17             this.left = null;
     18             this.right = null;
     19         }
     20         
     21         public Node(){
     22             
     23         }
     24     }
     25     private Node<E> root = null; //根节点
     26     private List<Node<E>> list = null; //节点列表,用于将数组元素转化为节点
     27     
     28     public Node<E> getRoot(){
     29         return this.root;
     30     }
     31     
     32     //将将数组转化为一颗二叉树,转换规则:依次为节点列表中节点的左右孩子赋值。左孩子为i*2+1,右孩子为i*2+2
     33     @SuppressWarnings("unchecked")
     34     public void createTreeByArray(Object[] array){
     35         this.list = new ArrayList<Node<E>>();
     36         
     37         //将数组添加到节点列表
     38         for (int i = 0; i < array.length; i++) {
     39             list.add(new Node<E>((E) array[i]));
     40         }
     41         
     42         System.out.println("头节点->" + list.get(0).data);
     43         this.root = new Node<E>(list.get(0).data); //根节点
     44         
     45         //为二叉树指针赋值
     46         for(int j = 0; j < (list.size() / 2); j ++){
     47             try {
     48                 //为左子树赋值  j*2+1
     49                 list.get(j).left = list.get(j * 2 + 1);
     50                 System.out.println("节点" + list.get(j).data + "左子树 ->" + list.get(j * 2 + 1).data);
     51                 //为右子树赋值 j*2+2
     52                 list.get(j).right = list.get(j * 2 + 2);
     53                 System.out.println("节点" + list.get(j).data + "右子树 ->" + list.get(j * 2 + 2).data);
     54             } catch (Exception e) {
     55                 
     56             }
     57         }
     58         
     59     }
     60     
     61     //先序遍历二叉树
     62     public void Indorder(Node<E> root){
     63         if(root == null){
     64             return;
     65         }
     66         System.out.println(root.data);
     67         Indorder(root.left);  //递归输出左子树
     68         Indorder(root.right); //递归遍历右子树
     69     }
     70     
     71     //中序遍历二叉树
     72     public void inOrderTraverse(Node<E> root){
     73         if(root == null){
     74             return;
     75         }
     76         inOrderTraverse(root.left);  //遍历左子树
     77         System.out.println(root.data);
     78         inOrderTraverse(root.right); //遍历右子树
     79     }
     80     
     81     //后序遍历
     82     public void postOrderTraverse(Node<E> root){
     83         if(root == null){
     84             return;
     85         }
     86         postOrderTraverse(root.left);  //遍历左子数节点
     87         postOrderTraverse(root.right); //遍历右子树节点
     88         System.out.println(root.data); //从下往上遍历
     89     }
     90         
     91     
     92     public static void main(String[] args) {
     93         CreateTreeByArray<Integer> createTreeByArray = new CreateTreeByArray<Integer>();
     94         Object[] arrays = {new Integer(1),new Integer(2),new Integer(3),new Integer(4),5,6,7,8,9,10};
     95         createTreeByArray.createTreeByArray(arrays);
     96         System.out.println("===============================");
     97         createTreeByArray.postOrderTraverse(createTreeByArray.list.get(0));
     98     
     99     }
    100 
    101 }
  • 相关阅读:
    char , varchar和Nvarchar区别
    练习2-11 计算分段函数[2] (10 分)
    练习2-10 计算分段函数[1] (10 分)
    练习2-9 整数四则运算 (10 分)
    练习2-8 计算摄氏温度 (10 分)
    练习2-6 计算物体自由下落的距离 (5 分)
    练习2-4 温度转换 (5 分)
    练习2-3 输出倒三角图案 (5 分)
    MySQL之Xtrabackup备份与恢复
    MySQL中show语法
  • 原文地址:https://www.cnblogs.com/liaohai/p/6523069.html
Copyright © 2020-2023  润新知