一组数组int[] arr = {4,3,6,5,7,8},用二叉排序树后的结果是
此处用中序遍历后 为 3 4 5 6 7 8
创建二叉排序树的规则,根节点为arr[0],从arr[1]开始 如果比当前节点(第一次为根节点)小的值放在左子树,比当前节点(第一次为根节点)单的数放在右节点,以此递归,即可得到二叉排序树
代码演示:
public class ArrBinaryTree {
public static void main(String[] args) {
int[] arr = {4,3,6,5,7,8};
BinarySortTree sortTree = new BinarySortTree();
//创建二叉排序树
for (int i = 0; i < arr.length; i++) {
sortTree.add(new Node(arr[i]));
}
//调用中序遍历
sortTree.infixOrder();
}
}
class BinarySortTree{
private Node root;//创建一个根节点
public void add(Node node) {
if(root == null) {
//第一次进入方法肯定为空,就把传入的节点给到根节点,也就是arr[0]
root = node;
}else {
root.add(node);
}
}
//调用下面的中序遍历
public void infixOrder() {
root.infixOrder();
}
}
class Node{
public int value;//权(节点的值)
public Node left;//左子树
public Node right;//右子树
public Node(int value) {
this.value = value;
}
//中序遍历
public void infixOrder() {
if(this.left!=null) {
this.left.infixOrder();
}
System.out.println(this);
if(this.right!=null) {
this.right.infixOrder();
}
}
//添加节点
public void add(Node node) {
//判断新增节点是否为空,为空则退出
if(node==null) {
return;
}
//判断加入的值是否大于当前节点的值(第一次为根节点)
if(node.value<this.value) {
//判断此时节点的左子树是否为空
if(this.left==null) {
//如果为空的话,就直接把此值放在左子树
this.left = node;
}else {
//如果不为空的话 ,则递归比较
this.left.add(node);
}
}
//下面为同理,只是换成右边的递归
if(node.value>=this.value) {
//判断此时节点的左子树是否为空
if(this.right==null) {
//如果为空的话,就直接把此值放在左子树
this.right = node;
}else {
//如果不为空的话 ,则递归比较
this.right.add(node);
}
}
}
@Override
public String toString() {
return "Node [value=" + value + "]";
}
}