查找二叉树
首先确定好根节点的数据,以后往树中插入数据,比根节点大的数据往右节点中插入,否则往左节点中插入,如果根节点下的左右节点已经有数据占有的化,则以对应的左右节点作为父节点,创建父节点下新的左右节点,然后根据大小比较,判断插入数据位置,再进行数据插入。以此类推,形成一个树形结构数据。
查找二叉树的实现
class Tree{
//数据
private Integer data;
//左节点
private Tree left;
//右节点
private Tree right;
public Tree() {
}
public Tree(Integer data) {
this.data = data;
}
public Integer getData() {
return data;
}
public void setData(Integer data) {
this.data = data;
}
public Tree getLeft() {
return left;
}
public void setLeft(Tree left) {
this.left = left;
}
public Tree getRight() {
return right;
}
public void setRight(Tree right) {
this.right = right;
}
@Override
public String toString() {
return "Tree{" +
"data=" + data +
", left=" + left +
", right=" + right +
'}';
}
/**
* 二叉树中插入数据
* @param tree 二叉树对象
* @param num 插入数据
*/
public void add(Tree tree,Integer num){
//插入数据和左节点数据进行比较
//插入数据比父节点的数据小,则往左节点插入数据
if (num < tree.getData()){
//如果树中左节点为空,说明可以插入
if (tree.getLeft() == null){
//初始化左节点
tree.setLeft(new Tree());
//往左节点中插入数据
tree.getLeft().setData(num);
}else {
//左节点数据不为空,则递归找插入位置
add(tree.getLeft(), num);
}
}
//插入数据比父节点的数据大,则往右节点插入数据
else {
//如果树中右节点为空,说明可以插入
if (tree.getRight() == null) {
//初始化右节点
tree.setRight(new Tree());
//往右节点中插入数据
tree.getRight().setData(num);
}else {
//右节点数据不为空,则递归找插入位置
add(tree.getRight(),num);
}
}
}
/**
* 遍历树的数据
* @param tree 需要遍历的树
*/
public void ergodic(Tree tree){
//从根节点开始,往左节点中查找数据
if (tree.getLeft() != null) {
//左节点不为空,继续递归
ergodic(tree.getLeft());
}
//输出打印
System.out.println("tree.getData() = " + tree.getData());
//从根节点开始,往右节点中查找数据
if (tree.getRight() != null) {
//有节点不为空,继续递归
ergodic(tree.getRight());
}
}
}
测试类
public class Test {
public static void main(String[] args) {
//创建根节点
Tree tree = new Tree(10);
//插入数据
tree.add(tree,8);
tree.add(tree,12);
tree.add(tree,14);
tree.add(tree,9);
tree.add(tree,6);
tree.add(tree,11);
//打印出插入数据后的树
System.out.println("tree = " + tree);
//遍历树
tree.ergodic(tree);
}
}
结果输出
数据插入后,打印树:
为了更加方便观察,转为json格式:
遍历插入后的树的数据: