二叉树是数据结构中很重要的结构类型,学习数据结构也是深入学习编程的必由之路,这里我们简单介绍下我对于二叉树的理解,水平有限,如有错误还请不吝赐教。
首先照例定义一个二叉树的节点类
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());
}
结果输出
其中括号表示层级包含关系,
更多关于java的文章请戳这里:(您的留言意见是对我最大的支持)
我的文章列表
Email:sxh13208803520@gmail.com
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。