将数组转化成二叉树

本文介绍了一种将数组转换为二叉树的方法。通过创建结点类和二叉树类,利用递归方式实现数组元素添加到二叉树的过程,并通过中序遍历展示最终的二叉树结构。

这几天在学习树的相关知识,跟大家分享下如何实现数组转化成二叉树

首先创建二叉树的结点类

* 二叉树的结点类
 * @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);//递归
			}
		}
}
呵呵,到这里,数组的转化就算完成啦。

  

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值