创建二叉排序树
(1)创建二叉排序树,二叉树排序树有个特点,
如果结点值大于根,则在右子树去查找插入位置,如果小于树根,在左子树去查找树根,
如果相等,不作任何操作
(2)根据上面的特性,需要两个结点,分别是当前结点和父节点
(3)先遍历二叉树节点,找到要插入的位置,根据父节点的指向要插入的位置
实现过程如下所示:
package cn.edu.nwu.tree;
/**
* @author jcm
*
*时间 2016年9月28日
*/
public class InsertBinaryTree {
public static void main(String[] args) {
TreeNode root = null;
root = createBinaryTree(root, 45);
root = createBinaryTree(root, 24);
root = createBinaryTree(root, 53);
root = createBinaryTree(root, 12);
root = createBinaryTree(root, 124);
root = createBinaryTree(root, 12);
root = createBinaryTree(root, 28);
root = createBinaryTree(root, 90);
//中序遍历二叉树
GetTreeNodeInOrderTraver.inOrder(root);
}
/**
* @author jcm
* (1)创建二叉排序树,二叉树排序树有个特点,
* 如果结点值大于根,则在右子树去查找插入位置,
* 如果小于树根,在左子树去查找树根,
* 如果相等,不作任何操作
* (2)根据上面的特性,需要两个结点,分别是当前结点和父节点
* (3)先遍历二叉树节点,找到要插入的位置,根据父节点的指向要插入的位置
* @param root
* @param data
* @return
*/
public static TreeNode createBinaryTree(TreeNode root,int data){
TreeNode current = root,parent = null;
while(current != null){
if(current.data == data){
return root;
}
parent = current;
if(current.data < data){
current = current.rightRight;
}else{
current = current.leftChild;
}
}
TreeNode newNode = new TreeNode(data);
if(parent == null){
root = newNode;
}else if(parent.data>data){
parent.leftChild = newNode;
}else{
parent.rightRight = newNode;
}
return root;
}
}