102. 二叉树的层序遍历
主要使用迭代的方式处理(递归有点难理解)
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
if(root==null)return new ArrayList<List<Integer>>();
List<List<Integer>> res = new ArrayList<List<Integer>>();
LinkedList<TreeNode> q = new LinkedList<TreeNode>();
q.offer(root);
while(q.size()>0){
int deep = q.size();
ArrayList<Integer> temp = new ArrayList<Integer>();
for(int i=0;i<deep;++i) {
TreeNode tmp = q.poll();
temp.add(tmp.val);
if(tmp.left!=null)q.offer(tmp.left);
if(tmp.right!=null)q.offer(tmp.right);
}
res.add(temp);
}
return res;
}
}
226. 翻转二叉树
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root==null)return null;
swap(root);
invertTree(root.left);
invertTree(root.right);
return root;
}
private void swap(TreeNode root) {
TreeNode tmp = root.left;
root.left = root.right;
root.right = tmp;
}
}
101. 对称二叉树
必须使用后序遍历
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 outside = compare(left.left,right.right);
boolean inside = compare(left.right,right.left);
return outside&&inside;
}
}