简单查找二叉树的实现

先来个定义:

二叉树是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。
    二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的、分别称作这个根的左子树和右子树的二叉树组成。
    

有点抽象,类似的图像下面一样;实际上,是可以把树的概念与链表的概念结合起来的;可以想象一下,一个只有左节点或右节点的树,就是一个链表;因此,构建一棵树的

过程就有些像构建一个链表一样;大的在左边,小的在右边,每次插入一个新节点都要比较;

  A
       /     \
     B      C
    /  \    /   \
   D  E F  G
   / \
  H  I


首先,同样的,一个节点类;要实现Comparable接口,便于比较

public class NodeTest {
public Object idata;// 数据
public NodeTest leftNode;//左节点,类似于链表中的next节点
public NodeTest rightNode;//右节点,
public String left;
public NodeTest(int idata){
this.idata = idata;
}

public void display(){
System.out.println(idata+" "+left);
}
}


树的实现,

public class TreeTest {
private static NodeTest root;

//插入一个节点,分为存在根节点,不存在根节点两种情况
public void insertNode(int idata) {
NodeTest inNode = new NodeTest(idata);
if (root == null) {
inNode.left="根";
root = inNode;
return;
} else {
NodeTest current = root;
NodeTest parent;
while (true) {
parent = current;
if (inNode.idata > current.idata) {
current = current.leftNode;
if (current == null) {
inNode.left="左";
parent.leftNode = inNode;
return;
}
} else {
current = current.rightNode;
if (current == null) {
inNode.left="右";
parent.rightNode = inNode;
return;
}
}
}
}
}

//遍历一棵树,不断遍历自己的左右节点,直到左或右节点为null;
public void show(NodeTest node) {
if(node!=null){
node.display();
show(node.leftNode);
show(node.rightNode);
}
}


public static void main(String[] args) {
TreeTest treeTest = new TreeTest();
treeTest.insertNode(1);
treeTest.insertNode(4);
treeTest.insertNode(2);
treeTest.insertNode(11);
treeTest.insertNode(6);
treeTest.show(root);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值