重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
示例 1:
Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]
示例 2:
Input: preorder = [-1], inorder = [-1]
Output: [-1]
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
Map<Integer,Integer> treeMap;
public TreeNode buildTree(int[] preorder, int[] inorder) {
int n=preorder.length;
treeMap=new HashMap<Integer, Integer>();
for(int i=0;i<n;i++)
{
treeMap.put(inorder[i],i);
}
return myBuildTree(preorder,inorder,0,n-1,0,n-1);
}
TreeNode myBuildTree(int[] preorder, int[] inorder,int pl,int pr,int il,int ir) {
if(pl>pr)
return null;
int preorder_root=pl;
int inorder_root=treeMap.get(preorder[preorder_root]);
TreeNode root=new TreeNode(preorder[preorder_root]);
int treeleft_size=inorder_root-il;
root.left=myBuildTree(preorder,inorder,pl+1,pl+treeleft_size,il,inorder_root-1);
root.right=myBuildTree(preorder,inorder,pl+treeleft_size+1,pr,inorder_root+1,ir);
return root;
}
}
个人总结: 多练,二叉树不熟练
数值的整数次方
实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。
示例 1:
输入:x = 2.00000, n = 10
输出:1024.00000
示例 2:
输入:x = 2.10000, n = 3
输出:9.26100
示例 3:
输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25
class Solution {
public double myPow(double x, int n) {
if(x==0) return 0;
long b=n;
if(b<0){
x=1/x;
b=-b;
}
double res=1.0;
while(b>0){
if((b&1)==1){
res*=x;
}
x*=x;
b>>=1;
}
return res;
}
}
个人总结: 多练习
二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。
参考以下这颗二叉搜索树:
5
/ \
2 6
/ \
1 3
示例 1:
输入: [1,6,3,2,5]
输出: false
示例 2:
输入: [1,3,2,6,5]
输出: true
class Solution {
public boolean verifyPostorder(int[] postorder) {
return recur(postorder,0,postorder.length-1);
}
boolean recur(int[] postorder,int l,int r)
{
if(l>r)return true;
int m=l;
for(;m<r;m++)
{
if(postorder[m]>postorder[r])
break;
}
for(int i=m;i<r;i++)
{
if(postorder[i]<postorder[r])
return false;
}
return recur(postorder,l,m-1)&&recur(postorder,m,r-1);
}
}
个人总结: 思路不够清楚