您的位置:首页 > 理论基础 > 数据结构算法

数据结构之二叉树(java)

2018-01-14 15:37 323 查看
二叉树是数据结构中很重要的结构类型,学习数据结构也是深入学习编程的必由之路,这里我们简单介绍下我对于二叉树的理解,水平有限,如有错误还请不吝赐教。

首先照例定义一个二叉树的节点类

class Node {
private int value;//二叉树的值
private Node leftChild;//左孩子节点
private Node rightChild;//右孩子节点

public Node(int value, Node leftChild, Node rightChild) {
this.value = value;
this.leftChild = leftChild;
this.rightChild = rightChild;
}
}


插入节点

本次用到的二叉树是顺序二叉树,即判断当前插入的节点值与二叉树中父节点比较,如果value值大于父节点,插入父节点的右子树种,反之,插入左子树种,以此类推,直到找到相应的字节点插入。

public void insert(int value) {
if (parent == null) {//父节点为空判断
Node node = new Node(value, null, null);
parent = node;
length++;
} else {
currentPoint = parent;//将当前结点指向父节点
while(true){//循环遍历节点,查找适合的插入位置
if(currentPoint.value>value){
if(currentPoint.leftChild!=null){
currentPoint=currentPoint.leftChild;
}else{
currentPoint.leftChild=new Node(value,null,null);
length++;
break;
}
}else{
if(currentPoint.rightChild!=null){
currentPoint=currentPoint.rightChild;
}else{
currentPoint.rightChild=new Node(value,null,null);
length++;
break;
}
}
}
}
}


中序遍历二叉树节点

public String visit(Node node) {
sb.append(node.value+"(");
if (node.leftChild != null) visit(node.leftChild);//递归遍历左子树
if (node.rightChild != null) visit(node.rightChild);//递归遍历右子树
sb.append(")");
return sb.toString();
}


整体代码

public class BinaryTree {
private Node parent;
private Node currentPoint;
private StringBuffer sb;
private int length=0;

class Node {
private int value;
private Node leftChild;
private Node rightChild;

public Node(int value, Node leftChild, Node rightChild) {
this.value = value;
this.leftChild = leftChild;
this.rightChild = rightChild;
}
}
public Node getParent(){
return parent;
}

public BinaryTree() {
sb=new StringBuffer();
}

public void insert(int value) {
if (parent == null) {
Node node = new Node(value, null, null);
parent = node;
length++;
} else {
currentPoint = parent;
while(true){
if(currentPoint.value>value){
if(currentPoint.leftChild!=null){
currentPoint=currentPoint.leftChild;
}else{
currentPoint.leftChild=new Node(value,null,null);
length++;
break;
}
}else{
if(currentPoint.rightChild!=null){
currentPoint=currentPoint.rightChild;
}else{
currentPoint.rightChild=new Node(value,null,null);
length++;
break;
}
}
}
}
}

public String visit(Node node) {
sb.append(node.value+"(");
if (node.leftChild != null) visit(node.leftChild);
if (node.rightChild != null) visit(node.rightChild);
sb.append(")");
return sb.toString();
}
public int getLength(){
return length;
}

@Override
public String toString() {
return visit(parent);
}
}


main函数测试

public static void main(String[] args) {
BinaryTree bt = new BinaryTree();
bt.insert(1);
bt.insert(3);
bt.insert(2);
bt.insert
a51e
(5);
bt.insert(6);
bt.insert(7);
bt.insert(8);
bt.insert(9);
bt.insert(10);
bt.insert(11);
bt.insert(12);
bt.insert(13);
bt.insert(14);
bt.insert(15);
System.out.println(bt.getLength());
System.out.println(bt.toString());
}


结果输出

其中括号表示层级包含关系,



更多关于java的文章请戳这里:(您的留言意见是对我最大的支持)

我的文章列表

Email:sxh13208803520@gmail.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息