• 排序二叉树的基本操作


    描述

    二叉树的构建、插入新的结点、树的先中后序以及层序四种遍历

    代码

    import java.util.LinkedList;
    import java.util.Queue;
    
    class Node{
        public int data;
        public Node left;
        public Node right;
        public Node(int data){
            this.data=data;
            this.left=null;
            this.right=null;
        }
    }
    
    public class BinaryTree {
        private Node root;
        public BinaryTree(){
            root=null;
        }
        /*
        * 插入到排序二叉树
        * */
        public void insert(int data){
            Node newNode=new Node(data);
            if(root==null){
                root=newNode;
                return;
            }
            Node node=root;
            Node parent;
            while(true){
                parent=node;
                if(data<node.data){
                    node=node.left;
                    if(node==null){
                        parent.left=newNode;
                        return;
                    }
                }else{
                    node=node.right;
                    if(node==null){
                        parent.right=newNode;
                        return;
                    }
                }
            }
        }
        /*
        * 将数值输入构建二叉树
        * */
        public void buildTree(int[] data){
            for(int i=0;i<data.length;i++){
                insert(data[i]);
            }
        }
        /*
        * 先序遍历
        * */
        public void preOrder(){
            preOrder(root);
        }
        public void preOrder(Node node){
            if(node==null) return;
            System.out.print(node.data+" ");
            preOrder(node.left);
            preOrder(node.right);
        }
    
        /*
        * 中序遍历
        * */
        public void inOrder(){
            inOrder(root);
        }
        public void inOrder(Node node){
            if(node==null) return;
            inOrder(node.left);
            System.out.print(node.data+" ");
            inOrder(node.right);
        }
    
        /*
        * 后序遍历
        * */
        public void postOrder(){
            postOrder(root);
        }
        public void postOrder(Node node){
            if(node==null) return;
            postOrder(node.left);
            postOrder(node.right);
            System.out.print(node.data+" ");
        }
        /*
        * 层序遍历
        * */
        public void layerTranverse(){
            Node node = root;
            Queue<Node> queque=new LinkedList<Node>();
            queque.add(root);
            while(!queque.isEmpty()){
                node=queque.poll();
                System.out.print(node.data+" ");
                if(node.left!=null) queque.add(node.left);
                if(node.right!=null) queque.add(node.right);
            }
        }
    
        public static void main(String[] args) {
            BinaryTree bitree=new BinaryTree();
            int[] data={2,8,7,4,9,3,1,6,7,5};
            bitree.buildTree(data);
            System.out.print("二叉树的先序遍历:");
            bitree.preOrder();
            System.out.println();
            System.out.print("二叉树的中序遍历:");
            bitree.inOrder();
            System.out.println();
            System.out.print("二叉树的后序遍历:");
            bitree.postOrder();
            System.out.println();
            System.out.print("二叉树的层序遍历:");
            bitree.layerTranverse();
            System.out.println();
        }
    }
  • 相关阅读:
    回答提出的问题1-17章
    《构建之法》第13-17章读书笔记
    读《一个程序员的生命周期》有感
    构建之法的第十、十一、十二章读书笔记
    阅读《构建之法》第8,9,10章
    5.2-5.3
    作业5.1测试与封装
    读《构建之法》5.6.7 思考
    读《构建之法》的思考
    作业2 结对思则运算
  • 原文地址:https://www.cnblogs.com/zadomn0920/p/6361730.html
Copyright © 2020-2023  润新知