二叉排序树的实现

结点定义

package com.java.binaryTree;

public class BNode {
	public int data;
	public BNode lchild;
	public BNode rchild;
	public BNode(int data) {
		this.data=data;
	}
}

二叉树定义

package com.java.binaryTree;

import java.util.LinkedList;
import java.util.Queue;

public class BinaryTree {
	public BNode root;
	int size;
	public BinaryTree(int data) {
		root=new BNode(data);
		size++;
	}
	
	public void insertNode(int data){
		BNode node=new BNode(data);
		BNode curnode=root;
		BNode prenode=null;//指向插入结点位置的上一个结点
		while(curnode!=null){
			prenode=curnode;
			if(data<=curnode.data){
				curnode=curnode.lchild;
			}else{
				curnode=curnode.rchild;
			}
		}
		if(prenode!=null){//退出上面的while循环则表明待插入结点的父结点为prenode
			if(data<=prenode.data){
				prenode.lchild=node;
			}else{
				prenode.rchild=node;
			}
		}
		size++;
	}
	
            public void insertNode(BNode root,int data){        //递归插入
        BNode node=new BNode(data);
        if(data<=root.data){
            if(root.lchild==null){  //若左结点为空,直接插入左子结点
                root.lchild=node;
                size++;
            }
            else {                    //否则继续递归
                insertNode(root.lchild,data);
            }
        }else{
            if(root.rchild==null){        //若右子结点为空,直接插入右子结点
                root.rchild=node;
                size++;
            }else{                    //否则递归继续
                insertNode(root.rchild, data);
            }
        }
    }
    

	public static void DLR (BNode root){	//先序遍历
		if(root==null)return;
		System.out.print(root.data+" ");
		DLR(root.lchild);
		DLR( root.rchild);
	}
	
	public static void LDR (BNode root){	//中序遍历
		if(root==null)return;
		LDR(root.lchild);
		System.out.print(root.data+" ");
		LDR( root.rchild);
	}
	
	public static void LRD (BNode root){	//后序遍历
		if(root==null)return;
		LRD(root.lchild);
		LRD( root.rchild);
		System.out.print(root.data+" ");
	}
	
	public static void LevelTravel(BNode root){	//层次遍历
		Queue queue=new LinkedList();
		queue.offer(root);
		while(queue.size()>0){
			BNode temp=queue.poll();
			System.out.print(temp.data+" ");
			if(temp.lchild!=null)		//左子结点入队列
				queue.offer(temp.lchild);
			if(temp.rchild!=null)		//右子结点入队列
				queue.offer(temp.rchild);
		}
	}
}

Test

package com.java.binaryTree;

public class Test {

	public static void main(String[] args) {
		int data[]={6,8,5,3,9,2,7};
		BinaryTree tree=new BinaryTree(6);
		for(int i=1;i

输出

7
先序遍历
6 5 3 2 8 7 9
中序遍历
2 3 5 6 7 8 9
后序遍历
2 3 5 7 9 8 6
层次遍历
6 5 8 3 7 9 2

你可能感兴趣的:(数据结构)