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 buildTree(int[] data){
for(int i=0;i<data.length;i++){
insert(data[i]);
}
}
public void insert(int data){
Node newNode = new Node(data);
if(root==null){
root = newNode;
}else{
Node current = root;
Node parent;
while(true){//寻找插入位置
parent = current;
if(data<current.data){
current = current.left;
if(current==null){
parent.left = newNode;
return;
}
}else{
current = current.right;
if(current==null){
parent.right = newNode;
return;
}
}
}
}
}
//先序遍历
public void preOrder(){
this.preOrder(this.root);
}
public void preOrder(Node localRoot){
if(localRoot!=null){
System.out.print(localRoot.data + " ");
preOrder(localRoot.left);
preOrder(localRoot.right);
}
}
//中序遍历
public void inOrder(){
this.inOrder(this.root);
}
public void inOrder(Node localRoot){
if(localRoot!=null){
inOrder(localRoot.left);
System.out.print(localRoot.data + " ");
inOrder(localRoot.right);
}
}
//后序遍历
public void postOrder(){
this.postOrder(this.root);
}
public void postOrder(Node localRoot){
if(localRoot!=null){
postOrder(localRoot.left);
postOrder(localRoot.right);
System.out.print(localRoot.data + " ");
}
}
//层序遍历
public void layerTranverse() {
if(this.root==null) {
return;
}
Queue<Node> q = new LinkedList<Node>();
q.add(this.root);
while(!q.isEmpty()) {
Node n = q.poll();
System.out.println(n.data);
System.out.println(" ");
if(n.left!=null) {
q.add(n.left);
}
if(n.right!=null) {
q.add(n.right);
}
}
}
public static void main(String[] args){
int[] arr = {2,4,7,3,8,6,1};
BinaryTree btree = new BinaryTree();
btree.buildTree(arr);
btree.preOrder();
System.out.println();
btree.inOrder();
System.out.println();
btree.postOrder();
}
}
java数据结构与算法之树基本概念及二叉树(BinaryTree)的设计与实现!
https://blog.youkuaiyun.com/javazejian/article/details/53727333
轻松搞定面试中的二叉树题目
https://blog.youkuaiyun.com/luckyxiaoqiang/article/details/7518888/
java数据结构与算法之平衡二叉树(AVL树)的设计与实现
https://blog.youkuaiyun.com/javazejian/article/details/53892797
java实现平衡二叉树(详细分析)
https://blog.youkuaiyun.com/zxman660/article/details/7940190