文章目录
二叉树知识点复习
1.分类
二叉树分为:
- 满二叉树
- 完全二叉树
- 二叉搜索树
- 平衡二叉树
- 平衡二叉搜索树
2.遍历方式
前三种常用递归法,最后那种常用迭代法:
深度优先遍历(DFS):
- 前序遍历:中左右
- 中序遍历:左中右
- 后序遍历:左右中
广度优先遍历(BFS):
4. 层次遍历:从上到下,从左到右
3.存储方式
二叉树可以链式存储;也可以顺序存储,顺序存储用的是数组,一般不常用;但是常用都是链式存储。
以下是常用链表的二叉树的节点定义,一定要自己独立写出!!!
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
144.二叉树的前序遍历
1.思路
优先使用递归,前序遍历的遍历方式是:中左右,按照这个方式去对中的数据处理而对左右节点进行递归。
2.实现代码
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list=new ArrayList<Integer>();
preorder(root,list);
return list;
}
public void preorder(TreeNode root,List<Integer> listt){
if(root==null){
return;
}
//中
listt.add(root.val);
//左
preorder(root.left,listt);
//右
preorder(root.right,listt);
}
}
145.后序遍历
1.思路
后序遍历的遍历顺序是:左右中,总体是和前序遍历相同的,除了遍历顺序不同除外。
2.实现代码
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> list=new ArrayList<>();
postorder(root,list);
return list;
}
public void postorder(TreeNode root,List<Integer> list){
if(root==null){
return;
}
//左
postorder(root.left,list);
//右
postorder(root.right,list);
//中
list.add(root.val);
}
}
94.中序遍历
1.思路
中序遍历的遍历顺序是:左中右,总体是和前序遍历相同的,除了遍历顺序不同除外。
2.实现代码
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list=new ArrayList<>();
inorder(root,list);
return list;
}
public void inorder(TreeNode root,List<Integer> list){
if(root==null){
return;
}
//左
inorder(root.left,list);
//中
list.add(root.val);
//右
inorder(root.right,list);
}
}
拓展题目
589.N叉树的前序遍历
思路:首先前序遍历是:中左右,优先使用递归法,与二叉树的前序遍历不同的地方是:二叉树只有左右两个孩子,而N叉树有N个孩子,要将所有孩子遍历然后逐一使用递归。
代码实现:
class Solution {
public List<Integer> preorder(Node root) {
List<Integer> list=new ArrayList<>();
preorderN(root,list);
return list;
}
public void preorderN(Node root,List<Integer> list){
if(root==null){
return;
}
//中
list.add(root.val);
//所有子节点
for(Node node:root.children){
preorderN(node,list);
}
}
}
590.二叉树的后序遍历
思路:遍历顺序:左右中,除顺序不同外,其他的都是相同的,所以只要改变遍历顺序即可。
实现代码:
class Solution {
public List<Integer> postorder(Node root) {
List<Integer> list=new ArrayList<>();
postorderN(root,list);
return list;
}
public void postorderN(Node root,List<Integer> list){
if(root==null){
return;
}
for(Node node:root.children){
postorderN(node,list);
}
list.add(root.val);
}
}
总结
今日的内容就是掌握递归法对二叉树或者N叉树进行遍历,能用递归也能用迭代法和其他方法,都是只要优先掌握递归就好,注意如何递归。