题1:
解题思路:
前序:根左右
中序:左根右
后序:左右根
// 递归
public static void preOrder(TreeNode root){
if (root == null) {
return;
}
// 根结点
root.val
//打印左节点
preOrder(root.left)
//打印右节点
preOrder(root.right)
}
public int[][] threeOrders (TreeNode root) {
// write code here
if(root==null){
return new int[0][0];
}
ArrayList<Integer> list = new ArrayList<>();
preTransversal(list,root);
int[][] result = new int[3][list.size()];
int index =0;
for(int item:list){
result[0][index++] = item;
}
list.clear();
inTransversal(list,root);
index =0;
for(int item:list){
result[1][index++]=item;
}
list.clear();
postTransversal(list,root);
index=0;
for(int item:list){
result[2][index++]=item;
}
return result;
}
题2:
解题思路:BFS广度优先搜索
一层一层往下搜索,逐层遍历,从左往右;此处利用队列的先进先出特性来实现
- 队列的
add
和offer
区别
add
方法抛出异常offer
返回false
// 先判断空值
if(root ==null){
return new ArrayList<>();
}
Queue<TreeNode> queue = new LinkedList<>();
// 存储结果
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
//初始化时把root放入队列
queue.offer(root);
while(!queue.isEmpty()){
// 每一层的结点数
int levelNum = queue.size();
ArrayList<Integer> subList = new ArrayList<>();
for (int i = 0; i < levelNum; i++) {
TreeNode tree = queue.poll();
if(tree.left!=null){
queue.offer(tree.left);}
if(tree.right!=null){
queue.offer(tree.right); }
subList.add(tree.val);
}
res.add(subList);
}
return res;