二叉树专题

Posted Yuning算法

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树专题相关的知识,希望对你有一定的参考价值。

二叉树是经典的数据结构,对二叉树而言,主要是遍历。单链表是一叉树,如果单链表的递归玩的很溜的话,相信也能够拿下二叉树,进而为回溯和动归打下基础。回溯和动归可以理解是N叉树的遍历。区别是一个没有重复子问题一个有重复子问题。


二叉树的遍历我把它分为三类:

1、递归遍历

2、非递归遍历

3、层序遍历


二叉树是用递归定义的,因此适合用递归遍历,但是递归遍历太简单,而且代码量不大。所以面试的时候,肯定不会考这么简单的。


但是理解递归遍历是后续做题的基础,所以需要深刻理解。


非递归遍历是重点,很有可能就直接考你一道非递归后序遍历,因此需要重点掌握。


层次遍历相对来说要简单一点,也容易理解一点,层序遍历也是重点。


为更好理解二叉树的遍历我们精心准确如下题目:



这节我们简单的讲一下二叉树的遍历


二叉树结构如下:

public class TreeNode {  public int val;           // 根节点的值 public TreeNode left; // 左子树 public TreeNode right; // 右子树 public TreeNode(int value) { val = value; }}



A

前序遍历


访问根节点 --> 访问左子树 --> 访问右子树
递归代码:
 public void preorder(TreeNode root) { if(root == null) { return; }  System.out.print(root.val + " "); preorder(root.left); preorder(root.right); }



B

中序遍历


访问左子树 --> 访问根节点 --> 访问右子树
递归代码:
 public void inorder(TreeNode root) { if(root == null) { return; }  inorder(root.left); System.out.print(root.val + " "); inorder(root.right); }



C

后序遍历


访问左子树 --> 访问右子树 --> 访问根节点
递归代码:
 public void postorder(TreeNode root) { if(root == null) { return; }  postorder(root.left); postorder(root.right); System.out.print(root.val + " "); }



D

二叉树结构图


二叉树结构图如下所示,重点分析一下二叉树的前序遍历

二叉树专题

如上图一个二叉树结构,以它为参考,画出递归调用栈


二叉树专题


二叉树的调用细节一般情况下不必深入,因为可能压了几层栈,脑袋就迷糊了。


但是建议初学者还是需要跟进去,这对于递归理解大有帮助。熟了自然就明白了


如果不深入一次,那么对递归总会有一种恐惧。


建议画出递归栈,当走不下去,出栈,就知道当前指向的是哪个节点。


以上是关于二叉树专题的主要内容,如果未能解决你的问题,请参考以下文章

[专题五] 二叉树

平衡二叉树专题

专题总结-二叉树

开启二叉树专题,递归遍历二叉树模板(2021-7-20))

每日算法题 | 剑指offer 二叉树专题 (16) 平衡二叉树

数据结构面试题及答案讲解:二叉树专题(上)