对于二叉树重要在于用好父节点和左右子节点的关系,灵活使用递归算法。其实没什么好说的主要还是多应用,看个列子吧。
将一个随机数组转写成二叉树并排序
public class TestTree {
private static TreeNode root;
private static int[] array ;
public static void main(String ars[]) {
TestTree test = new TestTree();
array = test.ranArray();
TreeNode root = test.getNode(array);
test.printTree(root);
}
public TreeNode getNode(int[]array) {
if(array==null) {
System.out.println("数组为空");
} else {
root = new TreeNode(array[0]);
for(int i = 1; i < array.length; i++) {
arrayToTree(array[i], root);
}
}
return root;
}
/**
*数组转化为二叉树
*
/
public void arrayToTree(int i, TreeNode node) {
TreeNode newnode=new TreeNode(i);
//判断值与结点的大小
if((Integer)node.getObj()>i) {
if(node.getLeft()!=null) {
node=node.getLeft();
arrayToTree(i,node);
}
else {
node.setLeft(newnode);
newnode.setParent(node);
}
}
else {
if(node.getRight()!=null) {
node=node.getRight();
arrayToTree(i,node);
}
else{
node.setRight(newnode);
newnode.setParent(node);
}
}
}
/**
*得到随机数组
/
public int[] ranArray() {
int[] newarray = new int[20];
java.util.Random ran = new java.util.Random();
for(int i1 = 0; i1 <newarray.length; i1++) {
newarray[i1] = ran.nextInt(100);
}
return newarray;
}
/**
*中序遍历二叉树(即从小到大的排序)
/
public void printTree(TreeNode node) {
if(node != null) {
TreeNode left = node.getLeft();
printTree(left);
Object obj = node.getObj();
System.out.println(obj);
TreeNode right = node.getRight();
printTree(right);
}
}
}