• day13|二叉树理论


    一、二叉树的定义

    
    //定义一个二叉树:使用链式存储
    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;
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    二、前序遍历

    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+" "));
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    三、中序遍历

    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+" "));
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    四、后序遍历

    //后序遍历
    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+" "));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
  • 相关阅读:
    靶场战神为何会陨落?
    STM32H7 DMA阅读笔记
    Glide原理
    leetcode:1957. 删除字符使字符串变好
    如何做好医药产品说明书翻译?
    java计算机毕业设计-公益劳动招募管理系统-源码+数据库+系统+lw文档+mybatis+运行部署
    腾讯mini项目-【指标监控服务重构】2023-08-17
    Java泛型
    【MySQL】子查询详解
    【CKA考试笔记】十三、k8s中的网络
  • 原文地址:https://blog.csdn.net/My_Yes/article/details/133708032