二叉搜索树的创建
TreeNode 的定义在下面,把主要代码写在显眼的位置了
package BinaryTreeText;
/**
*
* 二分查找树的构建
*
* */
public class SearchBinaryTree {
private TreeNode root;
private TreeNode parent;
public SearchBinaryTree(){
}
/**
* 创建二分搜索树
*
* */
public TreeNode put(int data){
TreeNode treeNode = null;
TreeNode parent = null;
if(null == root){
treeNode = new TreeNode(0,data);
root = treeNode;
return treeNode;
}
// 每次都要从根节点开始
treeNode = root;
while (null !=treeNode){
// 父节点指向为当前节点
parent = treeNode;
//判断结点应该插入的位置
//如果比父结点的值大插在右边反之小于的话插在左边
if(data>parent.data){
treeNode = parent.rightChild;
}else if(data < parent.data){
treeNode = parent.liftChild;
}else{
return treeNode;
}
}
// 如果为空的话,说明找到了要插入的位置
//但是具体要往哪查还是得判断
treeNode = new TreeNode(0,data);
if (data > parent.data){
parent.rightChild = treeNode;
}else if(data < parent.data){
parent.liftChild = treeNode;
}
treeNode.parent = parent;
return treeNode;
}
/**
*
* 通过中序遍历验证是否创建正确
*
* 左,根,右
* */
public void midOrder(){
midOrder(root);
}
public void midOrder(TreeNode root){
if (null == root){
return ;
}
midOrder(root.liftChild);
System.out.println(root.data);
midOrder(root.rightChild);
}
public static void main(String[] args) {
SearchBinaryTree searchBinaryTree = new SearchBinaryTree();
int[] intArray = new int[]{50,30,20,44,88,33,87,46,7,77};
for (int i : intArray){
searchBinaryTree.put(i);
}
searchBinaryTree.midOrder();
}
class TreeNode{
private int index;
private int data;
private TreeNode liftChild;
private TreeNode rightChild;
private TreeNode parent;
public TreeNode(int index,int data){
this.index = index;
this.data = data;
this.liftChild = null;
this.rightChild = null;
this.parent = null;
}
public TreeNode getParent() {
return parent;
}
public void setParent(TreeNode parent) {
this.parent = parent;
}
public TreeNode getRightChild() {
return rightChild;
}
public void setRightChild(TreeNode rightChild) {
this.rightChild = rightChild;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public TreeNode getLiftChild() {
return liftChild;
}
public void setLiftChild(TreeNode liftChild) {
this.liftChild = liftChild;
}
}
}