系列文章目录
文章目录
前言
1、二叉树理论基础
重点在于如何遍历二叉树 ,卡哥讲到要闭眼都能定义出二叉树
1.1二叉树的种类
- 满二叉树
- 完全二叉树
- 平衡二叉树
- 二叉搜索树
1.1 如何区分二叉树的遍历方式
前序遍历 中 左 右
中序遍历 左 中 右
后序遍历 左 右 中
1.2 如何定义二叉树节点
可以理解为是一个链表
public class TreeNode {
int val; //定义值
TreeNode left;
TreeNode right;
TreeNode()
{
}
public TreeNode(int val) {
this.val = val;
}
public TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
2 递归遍历
思路就是:
1 确认递归函数的参数和返回值
2 确认终止条件
3 确认单层递归逻辑
2.1前序遍历 AC代码
/**
* Definition for a binary tree node.
* 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;
* }
* }
*/
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<Integer> ();
preorder (root,result);
return result;
}
public void preorder( TreeNode root, List<Integer> result)
{
if(root==null)
{
return ;
}
result.add(root.val);
preorder( root.left,result);
preorder( root.right,result);
}
}
2.2后序遍历 AC代码
/**
* Definition for a binary tree node.
* 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;
* }
* }
*/
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
postorder(root,res);
return res;
}
public void postorder(TreeNode root,List<Integer> res)
{
if(root==null)
{
return;
}
postorder(root.left,res);
postorder(root.right,res);
res.add(root.val);
}
}
2.3 中序遍历 AC代码
/**
* Definition for a binary tree node.
* 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;
* }
* }
*/
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List <Integer> res = new ArrayList<>();
inorder(root,res);
return res;
}
public void inorder(TreeNode root,List<Integer> res)
{
if( root== null)
{
return;
}
// 递归 中间 左 中 右
inorder(root.left,res);
res.add(root.val);
inorder(root.right,res);
}
}
3 迭代法
简单的递归可以用栈来模拟
4 层次遍历
层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。
需要一个辅助数据类型 队列
没听懂 懂了再补充
总结
什么是List<List < Integer >>??
首先List指的是存int类型数据的列表,List<List>指的是存【int类型数据的列表】类型数据的列表------有点“套娃”,大概意思就是这个母列表存子列表,其子列表存int类型的数据。