排序二叉树的基本操作

描述

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

代码

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;
        preOrder(node.left);
        System.out.print(node.data+" ");
        preOrder(node.right);
    }

    /*
    * 后序遍历
    * */
    public void postOrder(){
        postOrder(root);
    }
    public void postOrder(Node node){
        if(node==null) return;
        preOrder(node.left);
        preOrder(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();
    }
}
时间: 2024-10-15 02:54:28

排序二叉树的基本操作的相关文章

数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL

树.二叉树.三叉树.平衡排序二叉树AVL 一.树的定义 树是计算机算法最重要的非线性结构.树中每个数据元素至多有一个直接前驱,但可以有多个直接后继.树是一种以分支关系定义的层次结构.    a.树是n(≥0)结点组成的有限集合.{N.沃恩}     (树是n(n≥1)个结点组成的有限集合.{D.E.Knuth})      在任意一棵非空树中:        ⑴有且仅有一个没有前驱的结点----根(root).        ⑵当n>1时,其余结点有且仅有一个直接前驱.         ⑶所有结

一步一步写算法(之排序二叉树线索化)

原文:一步一步写算法(之排序二叉树线索化) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前面我们谈到了排序二叉树,还没有熟悉的同学可以看一下这个,二叉树基本操作.二叉树插入.二叉树删除1.删除2.删除3.但是排序二叉树也不是没有缺点,比如说,如果我们想在排序二叉树中删除一段数据的节点怎么办呢?按照现在的结构,我们只能一个一个数据查找验证,首先看看在不在排序二叉树中,如果在那么删除:如果没有这个数据,那么继续查找.那么有没有方法,可以保

计算机程序的思维逻辑 (42) - 排序二叉树

40节介绍了HashMap,41节介绍了HashSet,它们的共同实现机制是哈希表,一个共同的限制是没有顺序,我们提到,它们都有一个能保持顺序的对应类TreeMap和TreeSet,这两个类的共同实现基础是排序二叉树,为了更好的理解TreeMap/TreeSet,本节我们先来介绍排序二叉树的一些基本概念和算法. 基本概念 先来说树的概念,现实中,树是从下往上长的,树会分叉,在计算机程序中,一般而言,与现实相反,树是从上往下长的,也会分叉,有个根节点,每个节点可以有一个或多个孩子节点,没有孩子节点

&lt;二叉树的基本操作&gt;

#include<stdio.h> #include<stdlib.h> #include<string.h> #define num 100 #define OK 1 typedef int Status; typedef char DataType; typedef struct node { DataType data; struct node *lchild,*rchild; }BinTNode,*BinTree; Status CreateBiTree(Bin

打印菜单界面,用c语言实现二叉树的基本操作

打印菜单界面,用c语言实现二叉树的基本操作: 其代码原理和用c++实现一样,请看本人上篇博客:二叉树的先序.中序.后序遍历等基本操作c++实现,链接:http://yaoyaolx.blog.51cto.com/10732111/1783527 实现代码: #include <stdio.h> #include <stdlib.h> #define MAXSIZE 50 //定义二叉树的二叉链表结构 typedef struct Node { char data; struct N

二叉树及排序二叉树的相关操作汇总

前记:由于种种原因,以前一看到什么树啊链表啊,那就相当的恐惧,真是惭愧,最近仔细研究了一下这些东西,发现也就那样,或许是我之前根本就没怎么花心思学.. 话不多说,下面就直接上代码吧,也没什么好解释的,只要我自己理解代码就行了,哈哈哈... 代码参考<C和C++程序员面试秘笈>一书 // Tree.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stack> #include <queue>

TreeMap源码分析之一 —— 排序二叉树、平衡二叉树、红黑树

一.排序二叉树(BST树) 1.排序二叉树的定义 排序二叉树,Binary Sort Tree 排序二叉树要么是一棵空二叉树,要么是具有下列性质的二叉树: (1)若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值: (2)若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值: (3)它的左.右子树也分别为排序二叉树. 按中序遍历排序二叉树可以得到由小到大的有序序列. 比如 2.排序二叉树的插入和删除 二.平衡二叉树(Balanced Binary Tree,AVL树) 三.红黑

排序二叉树

题目大意:请完成下面四个函数的定义(在tree.h文件中),使整个程序能够利用排序二叉树的结构对输入的数(不会出现相同的数),进行排序输出.节点的结构体在下面已给出,这个二叉树的特征是,左子数的值肯定比父节点小,右子树的值肯定比父节点的大.要求大家按照这个结构特征去构建二叉树,最后中序遍历输出就是我们要求的升序输出. 树的节点结构体为: typedef struct Node { struct Node *left; struct Node *right; int value; } Node;

《二叉树的基本操作》

1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 #define NUM 100 //二叉树的最大结点数 6 #define QueueSize 100 //队列初始容量 7 #define TRUE 1 8 #define FALSE 0 9 #define OK 1 10 #define ERROR 0 11 #define OVERFLOW -1 12 13 typedef int