一組數(shù)組int[] arr = {4,3,6,5,7,8},用二叉排序樹(shù)后的結(jié)果是
此處用中序遍歷后 為 3 4 5 6 7 8
創(chuàng)建二叉排序樹(shù)的規(guī)則侵浸,根節(jié)點(diǎn)為arr[0],從arr[1]開(kāi)始 如果比當(dāng)前節(jié)點(diǎn)(第一次為根節(jié)點(diǎn))小的值放在左子樹(shù)喝噪,比當(dāng)前節(jié)點(diǎn)(第一次為根節(jié)點(diǎn))單的數(shù)放在右節(jié)點(diǎn)础嫡,以此遞歸,即可得到二叉排序樹(shù)
代碼演示:
public class ArrBinaryTree {
public static void main(String[] args) {
int[] arr = {4,3,6,5,7,8};
BinarySortTree sortTree = new BinarySortTree();
//創(chuàng)建二叉排序樹(shù)
for (int i = 0; i < arr.length; i++) {
sortTree.add(new Node(arr[i]));
}
//調(diào)用中序遍歷
sortTree.infixOrder();
}
}
class BinarySortTree{
private Node root;//創(chuàng)建一個(gè)根節(jié)點(diǎn)
public void add(Node node) {
if(root == null) {
//第一次進(jìn)入方法肯定為空酝惧,就把傳入的節(jié)點(diǎn)給到根節(jié)點(diǎn)榴鼎,也就是arr[0]
root = node;
}else {
root.add(node);
}
}
//調(diào)用下面的中序遍歷
public void infixOrder() {
root.infixOrder();
}
}
class Node{
public int value;//權(quán)(節(jié)點(diǎn)的值)
public Node left;//左子樹(shù)
public Node right;//右子樹(shù)
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();
}
}
//添加節(jié)點(diǎn)
public void add(Node node) {
//判斷新增節(jié)點(diǎn)是否為空,為空則退出
if(node==null) {
return;
}
//判斷加入的值是否大于當(dāng)前節(jié)點(diǎn)的值(第一次為根節(jié)點(diǎn))
if(node.value<this.value) {
//判斷此時(shí)節(jié)點(diǎn)的左子樹(shù)是否為空
if(this.left==null) {
//如果為空的話晚唇,就直接把此值放在左子樹(shù)
this.left = node;
}else {
//如果不為空的話 巫财,則遞歸比較
this.left.add(node);
}
}
//下面為同理,只是換成右邊的遞歸
if(node.value>=this.value) {
//判斷此時(shí)節(jié)點(diǎn)的左子樹(shù)是否為空
if(this.right==null) {
//如果為空的話哩陕,就直接把此值放在左子樹(shù)
this.right = node;
}else {
//如果不為空的話 平项,則遞歸比較
this.right.add(node);
}
}
}
@Override
public String toString() {
return "Node [value=" + value + "]";
}
}