102. 二叉树的层序遍历
思路:
需要建立一个二维数组,把每一层对应的元素输出到一层数组内
两层while循环,外层遍历层数,内层遍历层内元素个数
int len用来存放当前层的节点个数,遍历输出当前层节点,并加入当前层节点的孩子,最后len--
当前层节点遍历结束后,跳出内层循环,继续进行外层循环
while结束后,把数组分别加入到结果集中
最后输出结果集
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if(root == null) return res;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){//需要两层while循环,第一层不能少
List<Integer> list = new ArrayList<>();//每层都要新建一个数组,因此new数组放在循环内
int len = queue.size();//负责统计当前层有多少节点,因为每层节点数不同,每迭代一层都会变,因此放在while内定义,每遍历一层,更新一层
while (len-- > 0){//len记录每层节点个数,当len大于0时,循环弹出当前层节点,并插入下一层节点,len=0代表当前层输出结束,下一层while循环len统计新一层节点个数
TreeNode node = queue.poll();
list.add(node.val);
if(node.left != null) queue.offer(node.left);
if(node.right != null) queue.offer(node.right);
}
res.add(list);//把每层遍历到的结果添加到数组中
}
return res;//结果集为二维数组,第一维记录层,第二维记录每层元素的数组
}
}
226.翻转二叉树
思路:
利用递归交换节点,利用递归三部曲确定递归函数
1.确定递归返回值和参数
2.确定返回条件
3.确定单层递归逻辑(交换左右指针,然后将左右指针再分别扔入递归函数,一层一层调转)
public TreeNode invertTree(TreeNode root){//1.确定递归返回值和参数
if(root == null) return root;
invert(root);
return root;
}
public void invert(TreeNode root){
if(root == null) return;//2.确定返回条件
TreeNode tmp = root.right;
root.right = root.left;
root.left = tmp;
invert(root.left);//3.确定单层递归逻辑.在交换指针后,需要进入递归
invert(root.right);
}
101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
思路:
判断左右子树各种情况,条件匹配直接return
确定递归返回值类型和参数,需要两个参数分别是左右孩子,因为compare需要对比两个子树,传入一个参数无法对比
确定返回条件
确定单层循环逻辑
class Solution {
public boolean isSymmetric(TreeNode root) {
return compare(root.left,root.right);
}
public boolean compare(TreeNode left,TreeNode right){
if(left == null && right != null) return false;
else if(left != null && right == null) return false;
else if(left == null && right == null) return true;
else if(left.val != right.val) return false;
else {//使用后序遍历进行递归,因为需要判断节点的两个孩子节点是否对称,然后返回给上一层节点,最后都遍历完成后,直接返回boolean
boolean outside = compare(left.left,right.right);//对外层进行比较,并保存到一个新建的boolean类型变量,用于最后return
boolean inside = compare(left.right,right.left);
return outside && inside;
}
}
}