二叉树遍历

题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广度优先搜索

BFS广度优先搜索

一层一层往下搜索,逐层遍历,从左往右;此处利用队列的先进先出特性来实现

  • 队列的addoffer区别
  1. add方法抛出异常
  2. 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;
 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值