题目
类型:DFS、BFS、二叉树
解题思路
1、BFS需要用到层序遍历的代码框架
// 输入一棵二叉树的根节点,层序遍历这棵二叉树void levelTraverse(TreeNode root) {if (root == null) return;Queue<TreeNode> q = new LinkedList<>();q.offer(root);// 从上到下遍历二叉树的每一层while (!q.isEmpty()) {int sz = q.size();// 从左到右遍历每一层的每个节点for (int i = 0; i < sz; i++) {TreeNode cur = q.poll();// 将下一层节点放入队列if (cur.left != null) {q.offer(cur.left);}if (cur.right != null) {q.offer(cur.right);}}}}
2、DFS还是分解问题即可
代码
/*** 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;* }* }*//*** 515. 在每个树行中找最大值*/public class FindLargestValueInEachTreeRow {//---------------------------------BFS版本---------------------------------public List<Integer> largestValues(TreeNode root) {List<Integer> res = new LinkedList<>();if (root == null) {return res;}Queue<TreeNode> q = new LinkedList<>();q.offer(root);// while 循环控制从上向下一层层遍历while (!q.isEmpty()) {int sz = q.size();// 记录这一层的最大值int levelMax = Integer.MIN_VALUE;// for 循环控制每一层从左向右遍历for (int i = 0; i < sz; i++) {TreeNode cur = q.poll();levelMax = Math.max(levelMax, cur.val);if (cur.left != null)q.offer(cur.left);if (cur.right != null)q.offer(cur.right);}res.add(levelMax);}return res;}//---------------------------------DFS版本---------------------------------ArrayList<Integer> res = new ArrayList<>();public List<Integer> largestValuesDFS(TreeNode root) {if (root == null) {return res;}traverse(root, 0);return res;}// 遍历二叉树public void traverse(TreeNode root, int depth) {if (root == null) {return;}if (res.size() <= depth) {res.add(root.val);} else {// 记录当前行的最大值res.set(depth, Math.max(res.get(depth), root.val));}traverse(root.left, depth + 1);traverse(root.right, depth + 1);}}
