问题描述:
代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return search(nums,0,nums.length-1);
}
public TreeNode search(int[] nums,int left ,int right){
if(left>right)
return null;
int mid=(right+left)/2;
TreeNode m = new TreeNode(nums[mid]);
m.left=search(nums,left,mid-1);
m.right=search(nums,mid+1,right);
return m;
}
}
思路:
问题描述:
代码:
class Solution {
private HashMap<Integer,Integer> hx;
public TreeNode buildTree(int[] preorder, int[] inorder) {
hx= new HashMap<Integer,Integer>();
for(int i=0;i<inorder.length;i++){
hx.put(inorder[i],i);
}
return ecs(preorder,inorder,0,preorder.length-1,0,inorder.length-1);
}
public TreeNode ecs(int[] preorder,int[] inorder,int preLeft,int preRight,int inLeft,int inRight)
{
if(preLeft>preRight){
return null;
}
TreeNode root=new TreeNode(preorder[preLeft]);
int leftTreeIn=hx.get(preorder[preLeft]);
int inLeftSize=leftTreeIn-inLeft;
root.left=ecs(preorder,inorder,preLeft+1,preLeft+inLeftSize,inLeft,leftTreeIn-1);
root.right=ecs(preorder,inorder,preLeft+inLeftSize+1,preRight,leftTreeIn+1,inRight);
return root;
}
}
思路:
问题描述:
代码:
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> ans = new LinkedList<>();
if(root==null)
return ans;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int count=0;
while(!queue.isEmpty()){
Deque<Integer> list = new LinkedList<>();
int size=queue.size();
while(size!=0){
TreeNode T = queue.poll();
size--;
if(count%2==0){
list.offerLast(T.val);
}else{
list.offerFirst(T.val);
}
if(T.left!=null)
queue.offer(T.left);
if(T.right!=null)
queue.offer(T.right);
}
count++;
ans.add(new LinkedList<Integer>(list));
}
return ans;
}
}
思路:
构造双向队列