1. 一颗二叉树是否位平衡二叉树
2.二叉树中序遍历的下一个节点
3.对称二叉树
4.二叉树的前序,中序,后序遍历
5.是否为二叉搜索树
6.树的子结构
7.二叉树的深度
8.二叉树的Z字遍历
9.二叉树的层序遍历保存
1)递归方法
//用递归做的
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
depth(pRoot, 1, list);
return list;
}
private void depth(TreeNode root, int depth, ArrayList<ArrayList<Integer>> list) {
if(root == null) return;
if(depth > list.size())
list.add(new ArrayList<Integer>());
list.get(depth -1).add(root.val);
depth(root.left, depth + 1, list);
depth(root.right, depth + 1, list);
}
}
2)队列方法
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
if(pRoot==null){
return result;
}
Queue<TreeNode> queueleft = new LinkedList<>();
Queue<TreeNode> queueright = new LinkedList<>();
queueleft.add(pRoot);
boolean flag = true;
while(!queueleft.isEmpty()||!queueright.isEmpty()){
ArrayList<Integer> outone = new ArrayList<>();
while(flag&&!queueleft.isEmpty()) {
TreeNode curRoot = queueleft.poll();
outone.add(curRoot.val);
if (curRoot.left != null) {
queueright.add(curRoot.left);
}
if (curRoot.right != null) {
queueright.add(curRoot.right);
}
if (queueleft.isEmpty()) {
result.add(outone);
flag = false;
}
}
outone = new ArrayList<>();
while(!flag&&!queueright.isEmpty()){
TreeNode curRoot = queueright.poll();
outone.add(curRoot.val);
if(curRoot.left!=null) {
queueleft.add(curRoot.left);
}
if(curRoot.right!=null) {
queueleft.add(curRoot.right);
}
if(queueright.isEmpty()){
result.add(outone);
flag = true;
}
}
}
return result;
}
}