NC45 实现二叉树先序、中序和后序遍历
1、解题思路
递归求解即可,留意判断根为空的情况。
2、代码
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类 the root of binary tree
* @return int整型二维数组
*/
private List<Integer> pre = new LinkedList<>();
private List<Integer> in = new LinkedList<>();
private List<Integer> post = new LinkedList<>();
private void preOrder(TreeNode node){
if(node == null){
return;
}
pre.add(node.val);
if(node.left != null){
preOrder(node.left);
}
if(node.right != null){
preOrder(node.right);
}
}
private void inOrder(TreeNode node){
if(node == null){
return;
}
if(node.left != null){
inOrder(node.left);
}
in.add(node.val);
if(node.right != null){
inOrder(node.right);
}
}
private void postOrder(TreeNode node){
if(node == null){
return;
}
if(node.left != null){
postOrder(node.left);
}
if(node.right != null){
postOrder(node.right);
}
post.add(node.val);
}
public int[][] threeOrders (TreeNode root) {
// write code here
preOrder(root);
inOrder(root);
postOrder(root);
int len = in.size();
int[][] arr = new int[3][len];
for(int i = 0;i < len;i++){
arr[0][i] = pre.get(i);
arr[1][i] = in.get(i);
arr[2][i] = post.get(i);
}
return arr;
}
}
NC119 最小的K个数
1、解题思路
- 使用快排的思路,分别计算次数,然后分别判断即可。
2、代码
import java.util.ArrayList;
public class Solution {
private void quickSort(int[] arr,int l,int r,ArrayList<Integer> list,int k){
int i = l,j = r,base = arr[l];
while(i < j){
while(i < j && arr[j] >= base){
j--;
}
if(i < j){
arr[i++] = arr[j];
}
while(i < j && arr[i] <= base){
i++;
}
if(i < j){
arr[j--] = arr[i];
}
}
arr[i] = base;
int num = i - l + 1; // 当前这么多元素
if(num == k){
for(int m = l;m <= i;m++){
list.add(arr[m]);
}
}else if(num > k){
quickSort(arr,l,i,list,k);
}else{
// num < k
for(int m = l;m <= i;m++){
list.add(arr[m]);
}
quickSort(arr,i+1,r,list,k-num);
}
}
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> list = new ArrayList<Integer>();
if (k == 0)
return list;
quickSort(input,0,input.length - 1,list,k);
return list;
}
}
NC15 求二叉树的层序遍历
1、解题思路
- 利用队列,bfs即可
2、代码
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型ArrayList<ArrayList<>>
*/
public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
// write code here
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
if(root == null){
return list;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
ArrayList<Integer> temp = new ArrayList<Integer>();
int size = queue.size();
for(int i = 0;i < size;i++){
TreeNode node = queue.poll();
if(node.left != null){
queue.add(node.left);
}
if(node.right != null){
queue.add(node.right);
}
temp.add(node.val);
}
list.add(temp);
}
return list;
}
}