• 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
  • 相关阅读:
    Web前端:如何提高React Native App的性能?
    Parallels Desktop 18 中的新增功能
    思科dhcp服务器动态获取ip地址
    Golang实现一个批量自动化执行树莓派指令的软件(4)上传
    实现分别在Linux、Docker、Kubernetes上安装部署Mysql、Redis、Nginx软件
    安全防范之警惕钓鱼邮件
    uni-app自定义导航栏
    如何用个人电脑搭建一台本地服务器,并部署项目到服务器详细教程(Ubuntu镜像)
    nodejs 内置模块fs 常用api
    数据库可视化工具分享 (DBeaver)
  • 原文地址:https://blog.csdn.net/My_Yes/article/details/133708032