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);
    }
}
相关推荐
Anastasiozzzz2 分钟前
LeetCode Hot100 215. 数组中的第K个最大元素
数据结构·算法·leetcode
让我上个超影吧4 分钟前
【力扣76】最小覆盖子串
算法·leetcode·职场和发展
NMIXX爻8 分钟前
线程控制 下
java·开发语言·jvm
Howrun77710 分钟前
C++ 类间交互
开发语言·c++
近津薪荼18 分钟前
优选算法——双指针5(单调性)
c++·学习·算法
2401_8576835425 分钟前
C++代码静态检测
开发语言·c++·算法
时艰.30 分钟前
JVM 垃圾收集器(G1&ZGC)
java·jvm·算法
2401_8384725130 分钟前
内存泄漏自动检测系统
开发语言·c++·算法
开发者小天35 分钟前
python中的class类
开发语言·python
2501_933329551 小时前
Infoseek数字公关AI中台技术解析:如何构建企业级舆情监测与智能处置系统
开发语言·人工智能