今日主要题目
主要学习网址
做题思路与具体代码
题目一:102. 二叉树的层序遍历
做题思路
本题采用递归+队列解法,每次就存入该层所有节点,然后将该层节点加进答案中,再向队列中加节点的字节点,记住要利用好队列头
具体代码
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
//层序遍历解法
//广度优先搜索算法
//定义结果集
List<List<Integer>> result=new ArrayList<List<Integer>>();
//定义一个队列
Queue<TreeNode> queue=new LinkedList<>();
//如果为空,直接返回
if(root==null){
return result;
}
//把根部节点加到队列中
queue.offer(root);
//遍历队列加到结果集中
while(!queue.isEmpty()){
//新初始化结果集
List<Integer> list=new ArrayList<>();
//初始化长度
int length=queue.size();
while(length>0){
//把结果加到集合中
//这个结果是队列的头
//记住是队列的头
//并弹出头部
//存入头部的值
TreeNode mid = queue.poll();
list.add(mid.val);
//然后再往队列中加入值
//判断是否有左右节点
//有就加入
if (mid.left != null)
{queue.offer(mid.left);}
if (mid.right != null)
{queue.offer(mid.right);}
length--;
}
//把新结果集加入最终结果集中
result.add(list);
}
return result;
}
}
题目二:226. 翻转二叉树
做题思路
本题采用递归解法,每次就是对左右节点进行交换,直接递归,比较简单
具体代码
class Solution {
//递归方法解答
public TreeNode invertTree(TreeNode root) {
if (root == null) {
return null;
}
invertTree(root.left);
invertTree(root.right);
swap(root);
return root;
}
//交换双方子节点
private void swap(TreeNode root) {
TreeNode tmp = root.left;
root.left = root.right;
root.right = tmp;
}
}
题目三:101. 对称二叉树
做题思路
本题采用递归+后序遍历解法,只能用后序,左右子树同时比较,注意左右比较的节点,比如左节点的左节点与右节点的右节点比,注意物