102.二叉树的层序遍历
力扣题目链接 给你二叉树的根节点 root
,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
// 递归方式
class Solution {
List<List<Integer>> resList = new ArrayList<>();
public List<List<Integer>> levelOrder(TreeNode root) {
findNode(root, 0);
return resList;
}
public void findNode(TreeNode node, int deep) {
if (node == null) {
return;
}
// 深度一样的为同一层的节点,可以用这个作为resList的下标
deep++;
// 还没遍历到最后一层时,继续往二维数组里添加一维数组,一维数组负责保存每一层的节点
if (resList.size() < deep) {
List<Integer> item = new ArrayList<>();
resList.add(item);
}
// 根据resList下标存储节点
resList.get(deep - 1).add(node.val);
findNode(node.left, deep);
findNode(node.right, deep);
}
}
// 迭代方式
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> resList = new ArrayList<>();
// 借助队列
Queue<TreeNode> qe = new LinkedList<>();
if (root == null) {
return resList;
}
qe.offer(root);
while (!qe.isEmpty()) {
int size = qe.size();
List<Integer> item = new ArrayList<>();
while (size > 0) {
TreeNode node = qe.poll();
item.add(node.val);
if (node.left != null) {
qe.offer(node.left);
}
if (node.right != null) {
qe.offer(node.right);
}
size--;
}
resList.add(item);
}
return resList;
}
}
226.翻转二叉树
力扣题目链接 给你一棵二叉树的根节点 root
,翻转这棵二叉树,并返回其根节点。
// 递归法
class Solution {
public TreeNode invertTree(TreeNode root) {
if (root == null) {
return root;
}
invertTree(root.left);
invertTree(root.right);
TreeNode tempNode = new TreeNode();
tempNode = root.left;
root.left = root.right;
root.right = tempNode;
return root;
}
}
101. 对称二叉树
力扣题目链接 给你一个二叉树的根节点 root
, 检查它是否轴对称。
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) {
return true;
}
return compare(root.left, root.right);
}
public boolean compare(TreeNode left, TreeNode right) {
if (left != null && right == null) {
return false;
}
if (left == null && right != null) {
return false;
}
if (left == null && right == null) {
return true;
}
if (left.val != right.val) {
return false;
}
// 外侧是左节点的左孩子和右节点的右孩子比较
boolean outside = compare(left.left, right.right);
// 内侧是左节点的右孩子和右节点的左孩子比较
boolean inside = compare(left.right, right.left);
return inside && outside;
}
}