102. Binary Tree Level Order Traversal
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.add(root);
while(!queue.isEmpty()){
//itemList用来存单层的数
List<Integer> itemList = new ArrayList<>();
//一个循环开始时队列的size就是该层元素的数量
int size = queue.size();
while( size > 0){
//弹出一个node,用itemList记录
TreeNode temp = queue.poll();
itemList.add(temp.val);
//同时把弹出的node的左右孩子加入队列
if(temp.left != null){
queue.add(temp.left);
}
if(temp.right != null){
queue.add(temp.right);
}
size--;
}
res.add(itemList);
}
return res;
}
}
226. Invert Binary Tree
- 思路
- DFS前序遍历递归
-
java class Solution { public TreeNode invertTree(TreeNode root) { if(root == null){ return root; } swap(root); invertTree(root.left); invertTree(root.right); return root; } private void swap(TreeNode root){ TreeNode temp = root.left; root.left = root.right; root.right = temp; } }
101. Symmetric Tree
- 思路
- 递归
- 后续遍历比较
- 先比较外侧
- 在比较内测
-
java class Solution { public boolean isSymmetric(TreeNode root) { return compare(root.left, root.right); } private 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 compareOutside = compare(left.left, right.right); boolean compareInside = compare(left.right, right.left); return compareOutside && compareInside; } }
- 递归