1. 层序遍历
1.1 递归方式

public List<List<Integer>> resList = new ArrayList<List<Integer>>();
public List<List<Integer>> levelOrder(TreeNode root) {
checkFun02(root);
return resList;
}
public void checkFun01(TreeNode node, Integer deep) {
if (node == null) {
return;
}
deep++;
if (resList.size() < deep) {
ArrayList<Integer> integers = new ArrayList<>();
resList.add(integers);
}
resList.get(deep - 1).add(node.val);
checkFun01(node.left, deep);
checkFun01(node.right, deep);
}
1.2 迭代方式--借助队列
public void checkFun02(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()
while (len > 0) {
TreeNode tmpNode = que.poll()
itemList.add(tmpNode.val)
if (tmpNode.left != null) {
que.offer(tmpNode.left)
}
if (tmpNode.right != null) {
que.offer(tmpNode.right)
}
len--
}
resList.add(itemList)
}
}
2. 翻转二叉树

//递归法-前序遍历(中左右)
public TreeNode invertTree(TreeNode root) {
if (root == null) {
return null
}
//node指当前结点
TreeNode node = root
//交换当前结点的左右结点
swapChildren(node)
invertTree(node.left)
invertTree(node.right)
return root
}
private void swapChildren(TreeNode node) {
TreeNode tmp = node.right
node.right = node.left
node.left = tmp
}
3. 对称二叉树
public boolean isSymmetric(TreeNode root) {
return compare(root.left, root.right);
}
public 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;
}