各种层次遍历衍生
This commit is contained in:
parent
c6ec4950ea
commit
99db282c5d
92
src/main/java/cn/whaifree/leetCode/Tree/LeetCode116.java
Normal file
92
src/main/java/cn/whaifree/leetCode/Tree/LeetCode116.java
Normal file
@ -0,0 +1,92 @@
|
||||
package cn.whaifree.leetCode.Tree;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Deque;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Queue;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author whai文海
|
||||
* @Date 2024/1/18 16:11
|
||||
* @注释
|
||||
*/
|
||||
public class LeetCode116 {
|
||||
|
||||
class Node {
|
||||
public int val;
|
||||
public Node left;
|
||||
public Node right;
|
||||
public Node next;
|
||||
|
||||
public Node() {}
|
||||
|
||||
public Node(int _val) {
|
||||
val = _val;
|
||||
}
|
||||
|
||||
public Node(int _val, Node _left, Node _right, Node _next) {
|
||||
val = _val;
|
||||
left = _left;
|
||||
right = _right;
|
||||
next = _next;
|
||||
}
|
||||
|
||||
public void setLeft(Node left) {
|
||||
this.left = left;
|
||||
}
|
||||
|
||||
public void setRight(Node right) {
|
||||
this.right = right;
|
||||
}
|
||||
};
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
Node node = new Node(1);
|
||||
node.left = new Node(2);
|
||||
node.right = new Node(3);
|
||||
node.left.left = new Node(4);
|
||||
node.left.right = new Node(5);
|
||||
node.right.left = new Node(6);
|
||||
node.right.right = new Node(7);
|
||||
System.out.println(new Solution().connect(node));
|
||||
}
|
||||
|
||||
class Solution {
|
||||
|
||||
|
||||
|
||||
|
||||
public Node connect(Node root) {
|
||||
if (root == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Deque<Node> queue = new LinkedList<>();
|
||||
queue.add(root);
|
||||
while (!queue.isEmpty()) {
|
||||
|
||||
int size = queue.size();
|
||||
for (int i = 0; i < size; i++) {
|
||||
Node pop = queue.pop();
|
||||
|
||||
// 防止把下一层的节点赋值为next
|
||||
if (i < size - 1) {
|
||||
pop.next = queue.peek();
|
||||
}
|
||||
|
||||
if (pop.left != null) {
|
||||
queue.add(pop.left);
|
||||
}
|
||||
if (pop.right != null) {
|
||||
queue.add(pop.right);
|
||||
}
|
||||
}
|
||||
}
|
||||
return root;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
102
src/main/java/cn/whaifree/leetCode/Tree/LeetCode429.java
Normal file
102
src/main/java/cn/whaifree/leetCode/Tree/LeetCode429.java
Normal file
@ -0,0 +1,102 @@
|
||||
package cn.whaifree.leetCode.Tree;
|
||||
|
||||
import cn.whaifree.leetCode.model.Node;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author whai文海
|
||||
* @Date 2024/1/18 10:05
|
||||
* @注释
|
||||
*/
|
||||
public class LeetCode429 {
|
||||
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
Node node = new Node(1);
|
||||
node.children = new LinkedList<>();
|
||||
node.children.add(new Node(2));
|
||||
node.children.add(new Node(3));
|
||||
node.children.add(new Node(4));
|
||||
node.children.get(2).children = new ArrayList<>();
|
||||
node.children.get(2).children.add(new Node(6));
|
||||
node.children.get(2).children.add(new Node(7));
|
||||
|
||||
List<List<Integer>> lists = new Solution1().levelOrder(node);
|
||||
System.out.println(lists);
|
||||
|
||||
}
|
||||
|
||||
class Solution {
|
||||
public List<List<Integer>> levelOrder(Node root) {
|
||||
|
||||
|
||||
List<List<Integer>> res = new LinkedList<>();
|
||||
|
||||
if (root == null) {
|
||||
return res;
|
||||
}
|
||||
Deque<Node> queue = new LinkedList<>();
|
||||
|
||||
queue.add(root);
|
||||
while (!queue.isEmpty()) {
|
||||
|
||||
int size = queue.size();
|
||||
List<Integer> e = new ArrayList<>();
|
||||
for (int i = 0; i < size; i++) {
|
||||
Node pop = queue.pop();
|
||||
e.add(pop.val);
|
||||
List<Node> children = pop.children;
|
||||
if (children != null && !children.isEmpty()) {
|
||||
children.forEach(new Consumer<Node>() {
|
||||
@Override
|
||||
public void accept(Node node) {
|
||||
queue.add(node);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
res.add(e);
|
||||
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 递归实现
|
||||
*/
|
||||
class Solution1 {
|
||||
List<List<Integer>> res = new ArrayList<>();
|
||||
public List<List<Integer>> levelOrder(Node root) {
|
||||
if (root == null) {
|
||||
return res;
|
||||
}
|
||||
level(root, 0);
|
||||
return res;
|
||||
}
|
||||
|
||||
void level(Node root, int level) {
|
||||
|
||||
if (root == null) {
|
||||
return;
|
||||
}
|
||||
// 没有对应的层数值就创建
|
||||
if (res.size() <= level) {
|
||||
res.add(new ArrayList<>());
|
||||
}
|
||||
List<Integer> e = res.get(level);
|
||||
e.add(root.val);
|
||||
List<Node> children = root.children;
|
||||
if (children != null) {
|
||||
children.forEach(
|
||||
node -> level(node, level + 1)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
56
src/main/java/cn/whaifree/leetCode/Tree/LeetCode515.java
Normal file
56
src/main/java/cn/whaifree/leetCode/Tree/LeetCode515.java
Normal file
@ -0,0 +1,56 @@
|
||||
package cn.whaifree.leetCode.Tree;
|
||||
|
||||
import cn.whaifree.leetCode.model.Node;
|
||||
import cn.whaifree.leetCode.model.TreeNode;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Deque;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author whai文海
|
||||
* @Date 2024/1/18 10:45
|
||||
* @注释
|
||||
*/
|
||||
public class LeetCode515 {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
TreeNode treeNode = TreeNode.constructTree(new Integer[]{3, 1, 5, 0, 2, 4, 6, null, null, null, 3});
|
||||
treeNode.printTree();
|
||||
List<Integer> integers = new Solution().largestValues(treeNode);
|
||||
System.out.println(integers);
|
||||
}
|
||||
|
||||
class Solution {
|
||||
public List<Integer> largestValues(TreeNode root) {
|
||||
|
||||
List<Integer> res = new ArrayList<Integer>();
|
||||
|
||||
if (root == null) {
|
||||
return res;
|
||||
}
|
||||
|
||||
Deque<TreeNode> queue = new LinkedList<>();
|
||||
|
||||
queue.add(root);
|
||||
while (!queue.isEmpty()) {
|
||||
int size = queue.size();
|
||||
int max = Integer.MIN_VALUE;
|
||||
|
||||
for (int i = 0; i < size; i++) {
|
||||
TreeNode pop = queue.pop();
|
||||
max = Math.max(pop.val, max);
|
||||
if (pop.left != null) queue.add(pop.left);
|
||||
if (pop.right != null) queue.add(pop.right);
|
||||
}
|
||||
res.add(max);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
}
|
54
src/main/java/cn/whaifree/leetCode/model/Node.java
Normal file
54
src/main/java/cn/whaifree/leetCode/model/Node.java
Normal file
@ -0,0 +1,54 @@
|
||||
package cn.whaifree.leetCode.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author whai文海
|
||||
* @Date 2024/1/18 10:06
|
||||
* @注释
|
||||
*/
|
||||
public class Node {
|
||||
public int val;
|
||||
public List<Node> children;
|
||||
|
||||
public Node() {}
|
||||
|
||||
public Node(int _val) {
|
||||
val = _val;
|
||||
}
|
||||
|
||||
public Node(int _val, List<Node> _children) {
|
||||
val = _val;
|
||||
children = _children;
|
||||
}
|
||||
|
||||
public static Node buildTree(Integer[] array) {
|
||||
if (array == null || array.length == 0 || array[0] == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Node root = new Node(array[0]);
|
||||
Queue<Node> queue = new LinkedList<>();
|
||||
queue.offer(root);
|
||||
|
||||
int index = 1;
|
||||
|
||||
while (!queue.isEmpty() && index < array.length) {
|
||||
Node current = queue.poll();
|
||||
|
||||
while (index < array.length && array[index] != null) {
|
||||
Node child = new Node(array[index]);
|
||||
current.children.add(child);
|
||||
queue.offer(child);
|
||||
index++;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
|
||||
return root;
|
||||
}
|
||||
};
|
Loading…
Reference in New Issue
Block a user