二叉树就是不会搞

遍历记不住,搞不会,题目没思路,有思路时又写不出

前序、中序、后序,指的是根节点的位置,即根节点先访问、中间访问、最后访问三种,层序遍历是按照树层次结果遍历

递归三个要素:

  1. 函数的参数和返回值
  2. 终止条件
  3. 单层循环的逻辑

  • 前序遍历
  1. 递归写法
  2. 非递归写法

  • 中序遍历
  1. 递归写法
  2. 非递归写法

  • 后序遍历
  1. 递归写法
  2. 非递归写法

  • 层序遍历

9月24日考试又没有写出来
思路:二叉树分好多层,因为要按层遍历,所以如果直接采用函数递归的话,一下子就深入层底了,达不到按层的目的,所以要换一个角度,用队列 !!!
在这里插入图片描述

  1. 把根节点A放入队列,此时队列为:A,队列头为A
  2. 出A,把当前队列头元素A的左右儿子放入队列,即将B E放入队列,此时队列为B E
  3. 不断重复2步骤。A进,出A进BE,出B进CD,出E进F,出C,出D,出F
  4. 结束条件,队列为空时结束

所有节点都进去队列一次,然后再出队列一次,就是按层遍历,这个队列是动态的,只要有子节点,子节点就会不停的加入队尾,但总有子节点没有的时候,队列空了就结束了

 public List<Integer> levelOrder(TreeNode root) {
     Queue<TreeNode> que = new LinkedList(); // 层序遍历核心队列
     List<Integer> list = new ArrayList<>(); // 存放结果val
     que.add(root);  // A 节点入队列
     while (!que.isEmpty()) {  // 整个队列为空时,结束
     	//int size = que.size(); // 提前固定每一层的个数,因为que是一直在变化的
		//for (int i = 0; i < size; i++){ //遍历当前一层数据
         TreeNode tmp = que.poll();  // A 节点出队列,后续逐个出队列
         if (tmp != null) {       // 不为空时,存入结果val,并将左右子树 入队列
             list.add(tmp.val);
             que.add(tmp.left);
             que.add(tmp.right);
         }
     }
     System.out.println(list);
     return list;
 }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值