剑指Offer面试题6(Java版):重建二叉树

本文介绍了一种根据给定的前序遍历和中序遍历序列重构二叉树的方法,并通过递归实现了这一过程。同时提供了一个打印二叉树节点值的递归函数。

题目:输入某二叉树的前序遍历和中序遍历的结果,请重新构造出该二叉树。假设输入的前序遍历和中序遍历的结果中不包含重复的数字。例如输入的前序遍历序列为{1,2,4,7,3,5,6,8}和中序遍历为{4,7,2,1,5,3,6,8},则重建出二叉树并输出它的头结点。

public class test2 {
	public static void main(String[] args){
		int[] aheadArr={1,2,4,7,3,5,6,8};
    	int[] centerArr={4,7,2,1,5,3,6,8};
    	TreeNode treeNode=reConstructBinaryTree(aheadArr, centerArr);
    	printBinaryTree(treeNode);
	}
    /**
     * 定义一个二叉树的节点,节点具有的属性:left:左节点,right:右节点;val:当前值
     * @author Administrator
     *
     */
	static class TreeNode{
		int val;
		TreeNode leftNode;
		TreeNode rightNode;
		public TreeNode(int val1){
			val=val1;
		}
	}
	/**
	 * 递归重建二叉树各个节点。
	 * 用了系统工具类Arrays。当然也可以将Arrays替换成自己写的方法。
	 * @param preArr
	 * @param centerArr
	 * @return
	 */
	public static TreeNode reConstructBinaryTree(int[] preArr,int[] centerArr){
		TreeNode treeNode=null;
		for(int i=0;i<centerArr.length;i++){
			if(centerArr[i]==preArr[0]){
				treeNode=new TreeNode(preArr[0]);
				treeNode.leftNode=reConstructBinaryTree(Arrays.copyOfRange(preArr, 1, i+1), Arrays.copyOfRange(centerArr, 0, i));
				treeNode.rightNode=reConstructBinaryTree(Arrays.copyOfRange(preArr, i+1, preArr.length), Arrays.copyOfRange(centerArr, i+1, centerArr.length));
			}
		}
		return treeNode;
	}
	/**
	 * 递归打印二叉树
	 * @param treeNode
	 */
	public static void printBinaryTree(TreeNode treeNode){
		if(treeNode==null){
			return;
		}else{
			System.out.println(treeNode.val);
		}
		if(treeNode.leftNode!=null){
			printBinaryTree(treeNode.leftNode);
		}
		if(treeNode.rightNode!=null){
			printBinaryTree(treeNode.rightNode);
		}
	}

}

参考:http://blog.youkuaiyun.com/u012162920/article/details/52230517

参考:http://blog.youkuaiyun.com/jsqfengbao/article/details/47088947


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值