Skip to content

Commit fbdd2d6

Browse files
author
digitspace
committed
Week 02算法题
1 parent dc4ac66 commit fbdd2d6

File tree

9 files changed

+551
-0
lines changed

9 files changed

+551
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
public class LeetCode_105_569 {
2+
3+
public static void main(String[] args) {
4+
int[] preorder = {3,9,20,15,7};
5+
int[] inorder = {9,3,15,20,7};
6+
TreeNode root = new LeetCode_105_569().new Solution().buildTree(preorder, inorder);
7+
System.out.println( root.val );
8+
}
9+
10+
public class TreeNode {
11+
int val;
12+
TreeNode left;
13+
TreeNode right;
14+
TreeNode(int x) { val = x; }
15+
}
16+
17+
class Solution {
18+
public TreeNode buildTree(int[] preorder, int[] inorder) {
19+
return recurseBuildTree(preorder, inorder);
20+
}
21+
22+
TreeNode recurseBuildTree(int[] preorder, int[] inorder )
23+
{
24+
if( preorder.length == 0 )
25+
return null;
26+
TreeNode root = new TreeNode(preorder[0]);
27+
int idx = arraySearch(inorder, preorder[0]);
28+
root.left = recurseBuildTree(subArray(preorder,1,idx),subArray(inorder,0,idx));
29+
root.right = recurseBuildTree(subArray(preorder,idx+1,preorder.length-idx-1),subArray(inorder,idx+1,inorder.length-idx-1));
30+
return root;
31+
}
32+
33+
int[] subArray( int[] a, int begin, int length )
34+
{
35+
if( a.length < length+begin )
36+
return new int[0];
37+
int[] sub = new int[length];
38+
System.arraycopy(a, begin, sub, 0, length);
39+
return sub;
40+
}
41+
42+
int arraySearch( int[] a, int key ) {
43+
for ( int i = 0; i < a.length; i++ ) {
44+
if ( a[i] == key )
45+
return i;
46+
}
47+
return -1;
48+
}
49+
}
50+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import java.util.LinkedList;
2+
import java.util.List;
3+
import java.util.Stack;
4+
5+
/*
6+
* 144. Binary Tree Preorder Traversal
7+
* 二叉树的前序遍历
8+
*/
9+
public class LeetCode_144_569 {
10+
int index;
11+
12+
TreeNode buildTreeNode(Integer data[]){
13+
if( index >= data.length )
14+
return null;
15+
Integer value = data[index++];
16+
TreeNode node = null;
17+
if ( value != null ) {
18+
node = new TreeNode(value);
19+
node.left = buildTreeNode(data);
20+
node.right = buildTreeNode(data);
21+
}
22+
return node;
23+
}
24+
25+
public static void main(String[] args) {
26+
// TODO Auto-generated method stub
27+
//输入: [1,null,2,3]
28+
Integer[] treeData = { 1, null, 2, 3 };
29+
LeetCode_144_569 main = new LeetCode_144_569();
30+
TreeNode node = main.buildTreeNode(treeData);
31+
32+
List<Integer> result = main.new Solution().preorderTraversal(node);
33+
for(Integer v: result)
34+
System.out.println(v);
35+
}
36+
37+
38+
39+
public class TreeNode {
40+
int val;
41+
TreeNode left;
42+
TreeNode right;
43+
TreeNode(int x) { val = x; }
44+
}
45+
46+
class Solution {
47+
public List<Integer> preorderTraversal(TreeNode root) {
48+
List<Integer> result = new LinkedList<Integer>();
49+
Stack<TreeNode> stack = new Stack<TreeNode>();
50+
if ( root == null )
51+
return result;
52+
stack.push(root);
53+
while ( !stack.isEmpty() ) {
54+
TreeNode node = stack.pop();
55+
result.add( node.val );
56+
if ( node.right != null )
57+
stack.push( node.right );
58+
if ( node.left != null )
59+
stack.push( node.left );
60+
}
61+
62+
return result;
63+
}
64+
}
65+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import java.util.LinkedList;
2+
import java.util.List;
3+
import java.util.Stack;
4+
5+
6+
7+
/*
8+
* 145. Binary Tree Postorder Traversal
9+
* 二叉树的后序遍历
10+
*/
11+
public class LeetCode_145_569 {
12+
int index;
13+
14+
TreeNode buildTreeNode(Integer data[]){
15+
if( index >= data.length )
16+
return null;
17+
Integer value = data[index++];
18+
TreeNode node = null;
19+
if ( value != null ) {
20+
node = new TreeNode(value);
21+
node.left = buildTreeNode(data);
22+
node.right = buildTreeNode(data);
23+
}
24+
return node;
25+
}
26+
27+
public static void main(String[] args) {
28+
// TODO Auto-generated method stub
29+
//输入: [1,null,2,3]
30+
Integer[] treeData = { 1, null, 2, 3 };
31+
LeetCode_145_569 main = new LeetCode_145_569();
32+
TreeNode node = main.buildTreeNode(treeData);
33+
34+
List<Integer> result = main.new Solution().postorderTraversal(node);
35+
for(Integer v: result)
36+
System.out.println(v);
37+
}
38+
39+
40+
41+
public class TreeNode {
42+
int val;
43+
TreeNode left;
44+
TreeNode right;
45+
TreeNode(int x) { val = x; }
46+
}
47+
48+
class Solution {
49+
public List<Integer> postorderTraversal(TreeNode root) {
50+
LinkedList<Integer> result = new LinkedList<Integer>();
51+
Stack<TreeNode> stack = new Stack<TreeNode>();
52+
if ( root == null )
53+
return result;
54+
while ( !stack.isEmpty() || root != null ) {
55+
if ( root != null ) {
56+
result.addFirst(root.val);
57+
stack.push(root);
58+
root = root.right;
59+
} else {
60+
TreeNode node = stack.pop();
61+
root = node.left;
62+
}
63+
}
64+
return result;
65+
}
66+
}
67+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import java.util.ArrayList;
2+
import java.util.Arrays;
3+
import java.util.List;
4+
5+
6+
public class LeetCode_236_569 {
7+
8+
public static void main(String[] args) {
9+
// TODO Auto-generated method stub
10+
LeetCode_236_569 main = new LeetCode_236_569();
11+
12+
TreeNode result = main.new Solution().lowestCommonAncestor(null, null, null);
13+
}
14+
15+
16+
public class TreeNode {
17+
int val;
18+
TreeNode left;
19+
TreeNode right;
20+
TreeNode(int x) { val = x; }
21+
}
22+
23+
class Solution {
24+
TreeNode ancestor;
25+
26+
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
27+
recurseFind(root, p, q);
28+
return ancestor;
29+
}
30+
31+
int recurseFind(TreeNode node, TreeNode p, TreeNode q) {
32+
if ( node == null )
33+
return 0;
34+
if ( ancestor != null )
35+
return 0;
36+
37+
int leftFlag = recurseFind(node.left, p, q);
38+
int rightFlag = recurseFind(node.right, p, q);
39+
int pFlag = (node == p || node==q) ? 1 : 0;
40+
41+
if( leftFlag + rightFlag + pFlag >=2 )
42+
ancestor = node;
43+
44+
return (leftFlag + rightFlag + pFlag)>0 ? 1 : 0;
45+
}
46+
}
47+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import java.util.ArrayList;
2+
import java.util.Arrays;
3+
import java.util.LinkedList;
4+
import java.util.List;
5+
6+
7+
public class LeetCode_429_569 {
8+
9+
public static void main(String[] args) {
10+
LeetCode_429_569 main = new LeetCode_429_569();
11+
Node node1 = main.new Node(1);
12+
Node node3 = main.new Node(3);
13+
Node node2 = main.new Node(2);
14+
Node node4 = main.new Node(4);
15+
Node node5 = main.new Node(5);
16+
Node node6 = main.new Node(6);
17+
node1.children = new ArrayList();
18+
node1.children.add(node3);
19+
node1.children.add(node2);
20+
node1.children.add(node4);
21+
node3.children = new ArrayList();
22+
node3.children.add(node5);
23+
node3.children.add(node6);
24+
25+
node2.children = new ArrayList();
26+
node4.children = new ArrayList();
27+
node5.children = new ArrayList();
28+
node6.children = new ArrayList();
29+
30+
List<List<Integer>> result = main.new Solution().levelOrder(node1);
31+
for(List v: result)
32+
System.out.println(Arrays.toString(v.toArray()));
33+
}
34+
35+
36+
class Node {
37+
public int val;
38+
public List<Node> children;
39+
40+
public Node() {}
41+
42+
public Node(int _val) {
43+
val = _val;
44+
}
45+
46+
public Node(int _val, List<Node> _children) {
47+
val = _val;
48+
children = _children;
49+
}
50+
};
51+
52+
class Solution {
53+
public List<List<Integer>> levelOrder(Node root) {
54+
List<List<Integer>> result = new ArrayList<>();
55+
if (root == null)
56+
return result;
57+
List<Node> levelNodes = new LinkedList<Node>();
58+
levelNodes.add(root);
59+
while( levelNodes.size() > 0 ) {
60+
List<Node> nextLevelNodes = new LinkedList<Node>();
61+
List<Integer> levelValues = new LinkedList<Integer>();
62+
result.add(levelValues);
63+
for( Node n : levelNodes ) {
64+
levelValues.add(n.val);
65+
for ( Node c : n.children ) {
66+
nextLevelNodes.add(c);
67+
}
68+
}
69+
levelNodes = nextLevelNodes;
70+
}
71+
return result;
72+
}
73+
}
74+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import java.util.ArrayList;
2+
import java.util.Arrays;
3+
import java.util.HashMap;
4+
import java.util.List;
5+
import java.util.Map;
6+
7+
/*
8+
* 49. Group Anagrams
9+
* 字母异位词分组
10+
*/
11+
public class LeetCode_49_569 {
12+
13+
public static void main(String[] args) {
14+
// TODO Auto-generated method stub
15+
String[] strs = { "eat", "tea", "tan", "ate", "nat", "bat" };
16+
LeetCode_49_569 main = new LeetCode_49_569();
17+
List<List<String>> result = main.new Solution().groupAnagrams(strs);
18+
for ( List<String> group: result ) {
19+
System.out.println(Arrays.toString(group.toArray()));
20+
}
21+
}
22+
23+
class Solution {
24+
public List<List<String>> groupAnagrams(String[] strs) {
25+
Map<String, List> anaMap = new HashMap<String, List>();
26+
for ( String s: strs ) {
27+
char[] t = s.toCharArray();
28+
Arrays.sort(t);
29+
String key = new String(t);
30+
if ( !anaMap.containsKey(key) ) {
31+
anaMap.put(key, new ArrayList() );
32+
}
33+
anaMap.get(key).add(s);
34+
}
35+
36+
return new ArrayList( anaMap.values() );
37+
}
38+
}
39+
}

0 commit comments

Comments
 (0)