php图书管理系统源码(含数据库脚本)
别看他只是⼀个简单的图书管理系统,⿇雀虽⼩,五张俱全,实现了常见字段⽐如字符串,整型,浮点型,⽇期型,图⽚型和⽂件型的添删改查,查询条件采⽤多条件组合模糊查询,查询结果都采⽤分页显⽰,其中字符串分为单⾏⽂本字符串,多⾏⽂本字符串和超级富⽂本字符串,对于富⽂本字段我们采⽤的是百度出品的UEditor插件,为⽹站增⾊不少!后台管理员登录采⽤了验证码,查询的结果记录都可以导出到Excel,对其中的图⽚上传和⽂件上传专门写了2个⽅法uploadPhoto和uploadFile放到了基类中,所有控制器类继承基类,实现了代码的精简优化!
⽂件:(访问密码:551685)
以下内容⽆关:
-------------------------------------------分割线---------------------------------------------
输⼊某⼆叉树的前序遍历和中序遍历的结果,请重建该⼆叉树。假设输⼊的前序遍历和中序遍历的结果中都不含重复的数字。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的⼆叉树:
3
/
9 20
/
15 7
限制:
0 <= 节点个数 <= 5000
分析
知道⼀棵树的先序遍历和中序遍历,可以还原⼀颗⼆叉树。知道⼀棵树的先序遍历和后续遍历,也可
以还原⼀颗⼆叉树。但如果知道中序遍历和后序遍历,是⽆法还原⼆叉树的,因为⽆法区分左右⼦树。
对于此题,假设有⼀颗⼆叉树的先序序列[3, 9, 6, 8, 20, 15, 7],中序序列[6, 9, 8, 3, 15, 20, 7],树是下⾯这个样⼦的
在这⾥插⼊图⽚描述
我们还原的步骤如下:
(1)根据先序遍历节点3,是树的根节点,然后在中序序列⾥查3的位置,3左边的节点[6, 9 ,8]组成树的左⼦树,3右边的节点[15, 20, 7]组成树的右⼦树。
(2)对左⼦树重复步骤(1)
(3)对右⼦树重复步骤(1)
此题的难点在于如何确定左右⼦树的根节点。对于左⼦树,preorder[i +1]就是根节点,对于右⼦树,因为先序遍历是先⾛根节点再⾛左⼦树,那么只需要知道当前左⼦树有⼏个节点,就可以知道右⼦树的根节点了。
编码
/**
Definition for a binary tree node.
public class TreeNode {
int val;
TreeNode left;
php好看主页源码TreeNode right;
TreeNode(int x) { val = x; }
}
*/
class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
return createTree(0, 0, inorder.length - 1, preorder, inorder);
}
private TreeNode createTree(int preStart, int inStart, int inEnd, int[] preorder, int[] inorder) { if (preStart >= preorder.length || inStart > inEnd) {
return null;
}
// 根节点
TreeNode root = new TreeNode(preorder[preStart]);
int rootIndex = 0;
// 查根节点在中序数组⾥的位置,拆分左右⼦树
for (int i = 0; i < inorder.length; i++) {
if (preorder[preStart] == inorder[i]) {
rootIndex = i;
break;
}
}
// 创建左⼦树
root.left = createTree(preStart + 1, inStart, rootIndex - 1, preorder, inorder);
// 创建右⼦树,rootIndex - inStart即当前左⼦树的节点数量
root.right = createTree(preStart + 1 + rootIndex - inStart, rootIndex + 1, inEnd, preorder, inorder);
return root;
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。