day13|二叉树理论

一、二叉树的定义

java 复制代码
//定义一个二叉树:使用链式存储
public class TreeNode {

	int val; // 节点的值
	TreeNode left; // 左子节点
	TreeNode right; // 右子节点
	
	public 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;
	}

}

二、前序遍历

bash 复制代码
package com.thirteenday.tree;

import java.util.ArrayList;
import java.util.List;


//前序遍历
/**
 * 递归三部曲:
 *  1、确定递归函数的参数和返回值
 *  2、确定递归终止条件
 *  3、确定单层递归的逻辑
 */
public class PreorderTraversal {
    /**
     * 1、确定递归函数的参数和返回值
     * @param root  树的根节点
     * @param result  将遍历的结果放在集合中
     */
    private static void preorder(TreeNode root , List<Integer> result){

        //2、确定递归终止条件
        if (root == null){
            return;
        }
        //3、确定单层递归的逻辑:前序遍历:根左右
        result.add(root.val); //根
        preorder(root.left,result);//左
        preorder(root.right,result); //右

    }
    public static List<Integer> preorderTraversal(TreeNode root){
        ArrayList<Integer> result = new ArrayList<>();
        preorder(root,result);
        return result;
    }

    public static void main(String[] args) {
        TreeNode root = new TreeNode(1, new TreeNode(2, new TreeNode(4), new TreeNode(5)), new TreeNode(3, new TreeNode(6), new TreeNode(7)));
        List<Integer> list = preorderTraversal(root);
        list.stream().forEach( e -> System.out.println(e+" "));
    }

}

三、中序遍历

bash 复制代码
package com.thirteenday.tree;

import java.util.ArrayList;
import java.util.List;

//中序遍历
public class InorderTraversal {


    /**
     * 1、确定递归函数的参数和返回值
     * @param root  树的根节点
     * @param result  将遍历的结果放在集合中
     */
    private static void preorder(TreeNode root , List<Integer> result){

        //2、确定递归终止条件
        if (root == null){
            return;
        }
        //3、确定单层递归的逻辑:中序遍历:左根右

        preorder(root.left,result);//左
        result.add(root.val); //根
        preorder(root.right,result); //右

    }

    public static List<Integer> inorderTraversal(TreeNode root){
        ArrayList<Integer> result = new ArrayList<>();
        preorder(root,result);
        return result;
    }


    public static void main(String[] args) {
        TreeNode root = new TreeNode(1, new TreeNode(2, new TreeNode(4), new TreeNode(5)), new TreeNode(3, new TreeNode(6), new TreeNode(7)));
        List<Integer> list = inorderTraversal(root);
        list.stream().forEach( e -> System.out.println(e+" "));
    }
}

四、后序遍历

bash 复制代码
//后序遍历
public class PostorderTraversal {
    /**
     * 1、确定递归函数的参数和返回值
     * @param root  树的根节点
     * @param result  将遍历的结果放在集合中
     */
    private static void preorder(TreeNode root , List<Integer> result){

        //2、确定递归终止条件
        if (root == null){
            return;
        }
        //3、确定单层递归的逻辑:后序遍历:左右根

        preorder(root.left,result);//左
        preorder(root.right,result); //右
        result.add(root.val); //根

    }

    public static List<Integer> postorderTraversal(TreeNode root){
        ArrayList<Integer> result = new ArrayList<>();
        preorder(root,result);
        return result;
    }


    public static void main(String[] args) {
        TreeNode root = new TreeNode(1, new TreeNode(2, new TreeNode(4), new TreeNode(5)), new TreeNode(3, new TreeNode(6), new TreeNode(7)));
        List<Integer> list = postorderTraversal(root);
        list.stream().forEach( e -> System.out.println(e+" "));
    }
}
相关推荐
灵感__idea18 小时前
Hello 算法:众里寻她千“百度”
前端·javascript·算法
Wect1 天前
LeetCode 130. 被围绕的区域:两种解法详解(BFS/DFS)
前端·算法·typescript
NAGNIP2 天前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
颜酱2 天前
单调栈:从模板到实战
javascript·后端·算法
CoovallyAIHub2 天前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
从春晚机器人到零样本革命:YOLO26-Pose姿态估计实战指南
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
Le-DETR:省80%预训练数据,这个实时检测Transformer刷新SOTA|Georgia Tech & 北交大
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
强化学习凭什么比监督学习更聪明?RL的“聪明”并非来自算法,而是因为它学会了“挑食”
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
YOLO-IOD深度解析:打破实时增量目标检测的三重知识冲突
深度学习·算法·计算机视觉
NAGNIP3 天前
轻松搞懂全连接神经网络结构!
人工智能·算法·面试