背景
整理一些有意思的题目,一些破题技巧与思想,均为学习笔记,做个记录…
说明
=> 五道 / 篇
=> Java
=> 二叉树相关
题目
1、重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
**思路:**首先得了解先序、中序的特点,接着从先序定位根,然后再去中序找出左右子树,依旧是递归实现。
public TreeNode reConstructBinaryTree(int[] pre, int[] in) {
return reConstructBinaryTree(pre, 0, pre.length - 1,
in, 0, in.length - 1);
}
/**
* @param pre 前序
* @param startPre 前序首位
* @param endPre 前序末位
* @param in 中序
* @param startIn 中序首位
* @param endIn 中序末位
* @return
*/
public TreeNode reConstructBinaryTree(int[] pre, int startPre, int endPre,
int[] in, int startIn, int endIn) {
// constraint
if (startPre > endPre || startIn > endIn) {
return null;
}
// 先序第一位即为根
TreeNode root = new TreeNode(pre[startPre]);
for (int i = startIn; i <= endIn; i++) {
// 中序找寻根所在位置
if (in[i] == pre[startPre]) {
/*
重点解