zoukankan      html  css  js  c++  java
  • java实现二叉树的构建以及三种遍历

    一、把一个数组的值赋给二叉树

    1.1二叉树的构建

     1.2 具体代码

    package com.algo.binarytree;
    
    import java.util.LinkedList;
    import java.util.List;
    
    public class BinTreeTraverse {
        
        private int [] array = {1,2,3,4,5,6,7,8,9};
        private static List<Node> nodeList = null;
        
        /**
         * 内部类
         * @param args
         */
        private static class Node{
            Node left;
            Node right;
            int data;
            Node(int newData){
                left = null;
                right = null;
                data = newData;
            }
        }
        
        public void createBinTree() {
            nodeList = new LinkedList<Node>();
            //将数组的值一次转为Node节点
            for(int nodeIndex = 0;nodeIndex<array.length;nodeIndex++) {
                nodeList.add(new Node(array[nodeIndex]));
            }
            // 对前lastParentIndex-1个父节点按照父节点与孩子节点的数字关系建立二叉树
            for(int parentIndex = 0;parentIndex<array.length/2-1;parentIndex++) {
                //左孩子
                nodeList.get(parentIndex).left = nodeList.get(parentIndex*2+1);
                //右孩子
                nodeList.get(parentIndex).right = nodeList.get(parentIndex*2+2);
            }
            //最后一个父节点:因为最后一个父节点可能没有右孩子,所以单独拿出来处理
            int lastParentIndex = array.length/2-1;
            //左孩子
            nodeList.get(lastParentIndex).left = nodeList.get(lastParentIndex*2+1);
            //右孩子
            if(array.length%2==1) {
                nodeList.get(lastParentIndex).right = nodeList.get(lastParentIndex*2+2);
            }
            
            
        }
        //前序遍历,根左右
        public static void preOrderTraverse(Node node) {
            if(node == null) {
                return ;
            }
            System.out.print(node.data + " ");
            preOrderTraverse(node.left);
            preOrderTraverse(node.right);
        }
        
        //中序遍历,左根右
        public static void inOrderTraverse(Node node) {
            if(node==null) {
                return;
            }
            preOrderTraverse(node.left);
            System.out.print(node.data + " ");
            preOrderTraverse(node.right);
        }
        
        //后序遍历,左右根
        public static void postOrderTraverse(Node node) {
            if(node == null) {
                return ;
            }
            postOrderTraverse(node.left);
            postOrderTraverse(node.right);
            System.out.print(node.data + " ");
        }
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            BinTreeTraverse binTree = new BinTreeTraverse();
            binTree.createBinTree();
            Node root = nodeList.get(0);
            
            
            System.out.println("先序遍历:");  
            preOrderTraverse(root);  
            System.out.println();  
      
            System.out.println("中序遍历:");  
            inOrderTraverse(root);  
            System.out.println();  
      
            System.out.println("后序遍历:");  
            postOrderTraverse(root);
            
    
        }
    
    }

    输出结果:

    先序遍历:
    1 2 4 8 9 5 3 6 7 
    中序遍历:
    2 4 8 9 5 1 3 6 7 
    后序遍历:
    8 9 4 5 2 6 7 3 1 
  • 相关阅读:
    C# 枚举转列表
    Idea 快捷键大全【转】
    Bootstrap列表与代码样式(附源码)--Bootstrap
    JQuery实现点击按钮切换图片(附源码)--JQuery基础
    Bootstrap文本排版基础--Bootsrap
    使用定时器限制点击按钮发送短信(附源码)--JavaScript小案例
    分类导航菜单的制作(附源码)--HTML
    MyEclipse开发平台下如何将新建的JSP页面的默认编码格式设置为UTF-8--JSP
    网页加载进度的实现--JavaScript基础
    动态地添加HTML控件-JavaScript基础
  • 原文地址:https://www.cnblogs.com/LoganChen/p/13028952.html
Copyright © 2011-2022 走看看