第十五天|102.二叉树的层序遍历,226.翻转二叉树
题目关键字:二叉树,层序遍历,队列
102_题目链接:https://leetcode.cn/problems/binary-tree-level-order-traversal/
代码实现,二叉树的类重复用
package LeetCode;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class YangSibo_102 {
}
class YangSibo_102_1{
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
Queue<TreeNode> queue = new LinkedList<TreeNode>();
if (root == null) return res;
queue.offer(root);
while(!queue.isEmpty()){
int size = queue.size();
List<Integer> temp = new ArrayList<Integer>();
while(size > 0){
TreeNode tmp = queue.poll();
temp.add(tmp.val);
if(tmp.left != null) {
queue.offer(root.left);
}
if(tmp.right != null){
queue.offer(root.right);
}
size --;
}
res.add(temp);
}
return res;
}
}
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;
}
}
解题注意事项:
1、层序遍历是通过二维数据存储每层的数据
2、迭代不涉及递归
3、队列弹出的数据个数取决于每层的数量快照
4、当a层的数据从队列全部弹出时,a+1的数据需要全部进入队列
题目关键字:二叉树,递归
226_题目链接:https://leetcode.cn/problems/invert-binary-tree/
代码实现
package LeetCode;
public class YangSibo_226 {
}
class YangSibo_226_1 {
public TreeNode invertTree(TreeNode root) {
if(root == null) return root;
if(root.left != null || root.right != null) {
TreeNode tmp = root.left;
root.left = root.right;
root.right= tmp;
}
invertTree(root.left);
invertTree(root.right);
return root;
}
}
解题注意事项
1、递归的三要素:确定递归的函数和返回值、递归退出的条件、单次递归需要处理的流程