0
点赞
收藏
分享

微信扫一扫

【学透二叉树-从前序与中序遍历序列构造二叉树】

题目描述:
在这里插入图片描述
图解分析:

左子树:
在这里插入图片描述
右子树:
在这里插入图片描述

代码实现:

import java.util.*
class Solution {
	public TreeNode buildTree(int[] preorder, int[] inorder) {
		if(preorder.length == 0 || inorder.length == 0) {
			return null;
		}
		//根据前序数组的第一个元素,就可以确定根节点
		TreeNode root = new TreeNode(preorder[0]);
		for(int i = 0;i < preorder.length; i++) {
			//用preorder[0]去中序数组中查找对应的元素
			if(preorder[0] == inorder[i]) {
				//将前序数组分成左右两半,再将中序数组分成左右两半
				int[] pre_left = Arrays.copyOfRange(preorder,1,i+1);
				int[] pre_right = Arrays.copyOfRange(preorder,i+1,preorder.length);
				int[] in_left = Arrays.copyOfRange(inorder,0,i);
				int[] in_right = Arrays.copyOfRange(inorder,i+1,inorder.length);
				//递归处理前序数组的左边部分和中序数组的左边部分
				//递归处理前序数组的右边部分和中序数组右边部分
				root.left = buildTree(pre_left,in_left);
				root.right = buildTree(pre_right,in_right);
				break;
			}
		}
		return root;
	}
}

  其中,Arrays.copyOfRange(array[] original,int from,int to)
将一个原始的数组original,从下标from开始复制,复制到上标to,生成一个新的数组。【注】这里包括下标from,不包括上标to。

举报

相关推荐

0 条评论