Java实现二叉树(简单版)

1.先定义节点

java 复制代码
/*
  定义一个树节点
 */
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;
    }
}

2.手动创建一个二叉树并遍历。

此处同时使用了前序遍历、中序遍历、后序遍历,实际只使用一种方法即可。

java 复制代码
public class BinaryTreeDemo {
    public static void main(String[] args) {
        //手动创建一个树
        TreeNode root=createTree();

        //1.前序遍历
        List<Integer> result=preorderTraversal(root);

        //2.中序遍历
        List<Integer> result2=inorderTraversal(root);

        //3.后序遍历
        List<Integer> result3=postorderTraversal(root);

        System.out.println(result);
        System.out.println(result2);
        System.out.println(result3);
    }


    //手动创建二叉树
    public static TreeNode createTree(){
        TreeNode root=new TreeNode(1);  //创建根节点
        TreeNode treeNode2=new TreeNode(2);
        TreeNode treeNode3=new TreeNode(3);
        TreeNode treeNode4=new TreeNode(4);
        TreeNode treeNode5=new TreeNode(5);
        TreeNode treeNode6=new TreeNode(6);
        TreeNode treeNode7=new TreeNode(7);

        root.left = treeNode2;
        root.right = treeNode3;
        treeNode2.left = treeNode4;
        treeNode2.right = treeNode5;
        treeNode3.left = treeNode6;
        treeNode3.right = treeNode7;

        return root;
    }

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

    public static void preorder(TreeNode root,List<Integer> result){
        if(root==null) return;    //如果当前节点为空,结束递归
        result.add(root.val);    //不为空,则将当前节点的值,加入链表中
        preorder(root.left,result);
        preorder(root.right,result);
    }

    //中序遍历
    public static List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> result=new ArrayList<>();
        inorder(root,result);
        return result;
    }
    public static void inorder(TreeNode root,List<Integer> result){
        if(root==null) return;
        inorder(root.left,result);
        result.add(root.val);
        inorder(root.right,result);
    }

    //后序遍历
    public static List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> result=new ArrayList<>();
        postorder(root,result);
        return result;
    }
    public static void postorder(TreeNode root,List<Integer> result){
        if(root==null) return;
        postorder(root.left,result);
        postorder(root.right,result);
        result.add(root.val);
    }
}
相关推荐
小刘max27 分钟前
最长递增子序列(LIS)详解:从 dp[i] 到 O(n²) 动态规划
算法·动态规划
桦说编程29 分钟前
Guava 迭代器增强类介绍
java·后端·设计模式
王璐WL1 小时前
【数据结构】双向链表
数据结构
谢景行^顾1 小时前
数据结构知识掌握
linux·数据结构·算法
235161 小时前
【JVM】Java为啥能跨平台?JDK/JRE/JVM的关系?
java·开发语言·jvm·spring boot·后端·spring·职场和发展
2401_860319521 小时前
【无标题】
开发语言·学习·rust
courtfu1 小时前
Plugin ‘mysql_native_password‘ is not loaded`
java·后端
枫子有风1 小时前
Go语言流程控制
android·java·golang
ShineWinsu1 小时前
对于数据结构:堆的超详细保姆级解析——下(堆排序以及TOP-K问题)
c语言·数据结构·c++·算法·面试·二叉树·
DuHz2 小时前
基于时频域霍夫变换的汽车雷达互干扰抑制——论文阅读
论文阅读·算法·汽车·毫米波雷达