二叉树的类java_数据结构之二叉树(java版)

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

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

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(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());

}

结果输出

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

6f56f3ed3672

Paste_Image.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值