二叉树专题
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
二叉树结构图
二叉树结构图如下所示,重点分析一下二叉树的前序遍历
如上图一个二叉树结构,以它为参考,画出递归调用栈
二叉树的调用细节一般情况下不必深入,因为可能压了几层栈,脑袋就迷糊了。
但是建议初学者还是需要跟进去,这对于递归理解大有帮助。熟了自然就明白了
如果不深入一次,那么对递归总会有一种恐惧。
建议画出递归栈,当走不下去,出栈,就知道当前指向的是哪个节点。
以上是关于二叉树专题的主要内容,如果未能解决你的问题,请参考以下文章