层序遍历 10
102. 二叉树的层序遍历 - 力扣(LeetCode)
代码随想录 (programmercarl.com)
综合代码:
class Solution{
public List<List<Integer>> resList = new ArrayList<List<Integer>>();
public List<List<Integer>> levelOrder(TreeNode root){
checkFund02(root);
return resList;
}
public void checkFund02(TreeNode node){
if(node == null) return;
//创建一个队列,用于存储待处理的节点
Queue<TreeNode> que = new LinkedList<TreeNode>();
que.offer(node);
while(!que.isEmpty()){
List<Integer> itemList = new ArrayList<Integer>();
int len = que.size();
for(int i = 0; i<len; i++){
TreeNode tmpNode = que.poll();
itemList.add(tmpNode.val);
if(tmpNode.left != null) que.offer(tmpNode.left);
if(tmpNode.right != null) que.offer(tmpNode.right);
}
resList.add(itemList);
}
}
}
226.翻转二叉树
226. 翻转二叉树 - 力扣(LeetCode)
代码随想录 (programmercarl.com)
翻转一棵二叉树。
这道题不能使用中序遍历,因为会翻转2次,我使用的是后序遍历:
//确定参数的返回值
public TreeNode invertTree(TreeNode root){
//确定终止条件
if(root == null){
return null;
}
//确定单层递归的逻辑:
//后序遍历翻转二叉树
invertTree(root.left);
invertTree(root.right);
invertTree(root);
return root;
}
//定义一个私有方法,用于交换给定节点的左右孩子
private void swapChildren(TreeNode root){
TreeNode tmp = root.left;
root.left = root.right;
root.right = tmp;
}
更简洁版本:
class Solution {
public TreeNode invertTree(TreeNode root) {
if (root == null)
return root;
TreeNode temp = root.left;
root.left = invertTree(root.right);
root.right = invertTree(temp);
return root;
}
}
101.对称二叉树 2
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root==null || (root.left==null && root.right==null)) {
return true;
}
//用队列保存节点
LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
//将根节点的左右孩子放到队列中
queue.add(root.left);
queue.add(root.right);
while(queue.size()>0) {
//从队列中取出两个节点,再比较这两个节点
TreeNode left = queue.removeFirst();
TreeNode right = queue.removeFirst();
//如果两个节点都为空就继续循环,两者有一个为空就返回false
if(left==null && right==null) {
continue;
}
if(left==null || right==null) {
return false;
}
if(left.val!=right.val) {
return false;
}
//将左节点的左孩子, 右节点的右孩子放入队列
queue.add(left.left);
queue.add(right.right);
//将左节点的右孩子,右节点的左孩子放入队列
queue.add(left.right);
queue.add(right.left);
}
return true;
}
}