1 二叉树的层序遍历
题目
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
代码
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res =new ArrayList<List<Integer>>();
if(root==null) return res;
Queue<TreeNode> queue =new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
List<Integer> item =new ArrayList<Integer>();
int len=queue.size();
while(len>0){
TreeNode temp=queue.poll();
item.add(temp.val);
if(temp.left!=null) queue.offer(temp.left);
if(temp.right!=null) queue.offer(temp.right);
len--;
}
res.add(item);
}
return res;
}
}
总结
二叉树的层序遍历,借助队列,当遍历结点出队列时,将它的左右孩子结点入队。
2 翻转二叉树
题目
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
代码
class Solution {
public TreeNode invertTree(TreeNode root) {
Queue<TreeNode> queue=new LinkedList<>();
if(root==null) return root;
queue.offer(root);
while(!queue.isEmpty()){
TreeNode temp=queue.poll();
swap(temp);
if(temp.left!=null) queue.offer(temp.left);
if(temp.right!=null) queue.offer(temp.right);
}
return root;
}
public void swap(TreeNode root){
TreeNode temp=root.left;
root.left=root.right;
root.right=temp;
}
}
总结
利用层序遍历,遍历的每一个结点交换其左右孩子结点
3 对称二叉树
题目
给你一个二叉树的根节点 root , 检查它是否轴对称。
代码
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root==null) return true;
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 out=compare(left.left,right.right);
boolean in=compare(left.right,right.left);
return out && in;
}
}
}
总结
递归