import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
TreeNode(int x, TreeNode left, TreeNode right) {
this.val = x;
this.left = left;
this.right = right;
}
}
public class Solution {
public void DFS(List<List<Integer>> result, TreeNode root, int level) {
if (root == null)
return;
if (level == result.size())
result.add(new ArrayList<>());
result.get(level).add(root.val);
DFS(result, root.left, level + 1);
DFS(result, root.right, level + 1);
}
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
DFS(result, root, 0);
return result;
}
public List<List<Integer>> levelOrder2(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
if (root == null)
return result;
LinkedList<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
int count = queue.size();
List<Integer> list = new ArrayList<>();
while (count-- > 0) {
TreeNode node = queue.poll();
list.add(node.val);
if (node.left != null)
queue.add(node.left);
if (node.right != null)
queue.add(node.right);
}
result.add(list);
}
return result;
}
public static void print(List<List<Integer>> nList) {
int level = 0;
for (List<Integer> list : nList) {
System.out.print("level " + level++ + " nodes:");
for (int d : list) {
System.out.print(d + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
TreeNode _15 = new TreeNode(15);
TreeNode _7 = new TreeNode(7);
TreeNode _9 = new TreeNode(9);
TreeNode _20 = new TreeNode(20, _15, _7);
TreeNode _3 = new TreeNode(3, _9, _20);
List<List<Integer>> result = new Solution().levelOrder(_3);
print(result);
System.out.println("---");
List<List<Integer>> result2 = new Solution().levelOrder2(_3);
print(result2);
}
}
二叉树层次遍历
最新推荐文章于 2023-07-05 21:27:44 发布