这几天在学习树的相关知识,跟大家分享下如何实现数组转化成二叉树
首先创建二叉树的结点类
* 二叉树的结点类
* @author Administrator
*
*/
public class TreeNode {
private int obj;//结点内的数据对象
private TreeNode parent;//对父结点的引用
private TreeNode left;//左子结点
private TreeNode right;//右子结点
//在创建结点对象的时候就传入结点中的数据对象
public TreeNode(int obj) {
this.obj=obj;
}
public int getObj() {
return obj;
}
public void setObj(int obj) {
this.obj = obj;
}
public TreeNode getParent() {
return parent;
}
public void setParent(TreeNode parent) {
this.parent = parent;
}
public TreeNode getLeft() {
return left;
}
public void setLeft(TreeNode left) {
this.left = left;
}
public TreeNode getRight() {
return right;
}
public void setRight(TreeNode right) {
this.right = right;
}
}
接下来就要写二叉树类了
/**
* 二叉树类
* @author Administrator
*
*/
public class MyTree {
//定义根结点
public static TreeNode root =null;
public static void main(String[] args) {
//给出数组
int[] a={6,3,1,5,8,9,7,2,7};
//创建对象
MyTree mt = new MyTree();
//遍历数组,将数组转成二叉树
for(int i=0;i<a.length;i++){
mt.add(a[i]);
}
//遍历二叉树
mt.printTree(root);
}
/**
* 比较两个结点
* i 新结点
* j 被比较的结点
* return 返回根结点
*/
public TreeNode createTreeNode(TreeNode i,TreeNode j){
//把将要添加的结点与根结点比较,若小于根结点就放在根结点左边
//(Object不能用于比较大小,int可以)
if(i.getObj() < j.getObj()){
//如果被比较结点的左边为空
if(j.getLeft()==null){
//添加结点
j.setLeft(i);
i.setParent(j);
}else {
//递归,继续添加
createTreeNode(i,j.getLeft());
}
}else {
//如果被比较结点的右边为空
if (j.getRight() == null) {
//添加结点
j.setRight(i);
i.setParent(j);
} else {
//递归,继续添加
createTreeNode(i, j.getRight());
}
}
//返回根结点
return root;
}
/**
* 将数组转化成二叉树
* @param i 传入的数组值
*/
public void add(int i){
TreeNode fat=null;
//定义一个空指针
//创建新结点,取出数组中的值添加到新结点中
TreeNode newNode =new TreeNode(i);
if(root ==null){//根结点为空
root=newNode;//直接赋值给根结点
}else {
fat=root;
createTreeNode(newNode,fat);//调用方法
}
}
/**
* 二叉树的遍历(中序遍历)
*
* @param root
* 根结点
*/
public void printTree(TreeNode root) {
if (null != root) {//根结点不为空
//得到左边的下一个结点
TreeNode left = root.getLeft();
printTree(left);//递归
//得到根结点的数据
Object data = root.getObj();
//输出数据
System.out.println(data);
//得到右边的下一个结点
TreeNode right = root.getRight();
printTree(right);//递归
}
}
}
呵呵,到这里,数组的转化就算完成啦。
本文介绍了一种将数组转换为二叉树的方法。通过创建结点类和二叉树类,利用递归方式实现数组元素添加到二叉树的过程,并通过中序遍历展示最终的二叉树结构。
1510

被折叠的 条评论
为什么被折叠?



