广告
返回顶部
首页 > 资讯 > 精选 >Java实现二叉树的代码怎么写
  • 481
分享到

Java实现二叉树的代码怎么写

2023-06-29 13:06:11 481人浏览 安东尼
摘要

本篇内容主要讲解“Java实现二叉树的代码怎么写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java实现二叉树的代码怎么写”吧!以此图为例,完整代码如下://基础二叉树实现//使用左右孩子表示

本篇内容主要讲解“Java实现二叉树的代码怎么写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java实现二叉树的代码怎么写”吧!

Java实现二叉树的代码怎么写

以此图为例,完整代码如下:

//基础二叉树实现//使用左右孩子表示法 import java.util.*;import java.util.Deque; public class myBinTree {    private static class Treenode{        char val;        TreeNode left;        TreeNode right;         public TreeNode(char val) {            this.val = val;        }    }     public static TreeNode build(){        TreeNode nodeA=new TreeNode('A');        TreeNode nodeB=new TreeNode('B');        TreeNode nodeC=new TreeNode('C');        TreeNode nodeD=new TreeNode('D');        TreeNode nodeE=new TreeNode('E');        TreeNode nodeF=new TreeNode('F');        TreeNode nodeG=new TreeNode('G');        TreeNode nodeH=new TreeNode('H');        nodeA.left=nodeB;        nodeA.right=nodeC;        nodeB.left=nodeD;        nodeB.right=nodeE;        nodeE.right=nodeH;        nodeC.left=nodeF;        nodeC.right=nodeG;        return nodeA;    }     //方法1(递归)    //先序遍历: 根左右    public static void preOrder(TreeNode root){        if(root==null){            return;        }        System.out.print(root.val+" ");        preOrder(root.left);        preOrder(root.right);    }     //方法1(递归)    //中序遍历    public static void inOrder(TreeNode root){        if(root==null){            return;        }        inOrder(root.left);        System.out.print(root.val+" ");        inOrder(root.right);    }     //方法1(递归)    //后序遍历    public static void postOrder(TreeNode root){        if(root==null){            return;        }        postOrder(root.left);        postOrder(root.right);        System.out.print(root.val+" ");    }     //方法2(迭代)    //先序遍历 (迭代)    public static void preOrderNonRecursion(TreeNode root){        if(root==null){            return ;        }        Deque<TreeNode> stack=new LinkedList<>();        stack.push(root);        while (!stack.isEmpty()){            TreeNode cur=stack.pop();            System.out.print(cur.val+" ");            if(cur.right!=null){                stack.push(cur.right);            }            if(cur.left!=null){                stack.push(cur.left);            }        }    }     //方法2(迭代)    //中序遍历 (迭代)    public static void inorderTraversalNonRecursion(TreeNode root) {        if(root==null){            return ;        }         Deque<TreeNode> stack=new LinkedList<>();        // 当前走到的节点        TreeNode cur=root;        while (!stack.isEmpty() || cur!=null){            // 不管三七二十一,先一路向左走到根儿~            while (cur!=null){                stack.push(cur);                cur=cur.left;            }            // 此时cur为空,说明走到了null,此时栈顶就存放了左树为空的节点            cur=stack.pop();            System.out.print(cur.val+" ");            // 继续访问右子树            cur=cur.right;        }    }     //方法2(迭代)    //后序遍历 (迭代)    public static void postOrderNonRecursion(TreeNode root){        if(root==null){            return;        }        Deque<TreeNode> stack=new LinkedList<>();        TreeNode cur=root;        TreeNode prev=null;         while (!stack.isEmpty() || cur!=null){            while (cur!=null){                stack.push(cur);                cur=cur.left;            }             cur=stack.pop();            if(cur.right==null || prev==cur.right){                System.out.print(cur.val+" ");                prev=cur;                cur=null;            }else {                stack.push(cur);                cur=cur.right;            }        }    }     //方法1(递归)    //传入一颗二叉树的根节点,就能统计出当前二叉树中一共有多少个节点,返回节点数    //此时的访问就不再是输出节点值,而是计数器 + 1操作    public static int getNodes(TreeNode root){        if(root==null){            return 0;        }        return 1+getNodes(root.left)+getNodes(root.right);    }     //方法2(迭代)    //使用层序遍历来统计当前树中的节点个数    public static int getNodesNoRecursion(TreeNode root){        if(root==null){            return 0;        }        int size=0;        Deque<TreeNode> queue=new LinkedList<>();        queue.offer(root);        while (!queue.isEmpty()) {            TreeNode cur = queue.poll();            size++;            if (cur.left != null) {                queue.offer(cur.left);            }            if (cur.right != null) {                queue.offer(cur.right);            }        }        return size;    }     //方法1(递归)    //传入一颗二叉树的根节点,就能统计出当前二叉树的叶子结点个数    public static int getLeafNodes(TreeNode root){        if(root==null){            return 0;        }        if(root.left==null && root.right==null){            return 1;        }        return getLeafNodes(root.left)+getLeafNodes(root.right);    }     //方法2(迭代)    //使用层序遍历来统计叶子结点的个数    public static int getLeafNodesNoRecursion(TreeNode root){        if(root==null){            return 0;        }        int size=0;        Deque<TreeNode> queue=new LinkedList<>();        queue.offer(root);        while (!queue.isEmpty()){            TreeNode cur=queue.poll();            if(cur.left==null && cur.right==null){                size++;            }            if(cur.left!=null){                queue.offer(cur.left);            }            if(cur.right!=null){                queue.offer(cur.right);            }        }        return size;    }     //层序遍历    public static void levelOrder(TreeNode root) {        if(root==null){            return ;        }         // 借助队列来实现遍历过程        Deque<TreeNode> queue =new LinkedList<>();        queue.offer(root);        while (!queue.isEmpty()){            int size=queue.size();            for (int i = 0; i < size; i++) {                TreeNode cur=queue.poll();                System.out.print(cur.val+" ");                if(cur.left!=null){                    queue.offer(cur.left);                }                if(cur.right!=null){                    queue.offer(cur.right);                }            }        }    }     //传入一个以root为根节点的二叉树,就能求出该树的高度    public static int height(TreeNode root){        if(root==null){            return 0;        }        return 1+ Math.max(height(root.left),height(root.right));    }     //求出以root为根节点的二叉树第k层的节点个数    public static int getKLevelNodes(TreeNode root,int k){        if(root==null || k<=0){            return 0;        }        if(k==1){            return 1;        }        return getKLevelNodes(root.left,k-1)+getKLevelNodes(root.right,k-1);    }     //判断当前以root为根节点的二叉树中是否包含指定元素val,    //若存在返回true,不存在返回false    public static boolean contains(TreeNode root,char value){        if(root==null){            return false;        }        if(root.val==value){            return true;        }        return contains(root.left,value) || contains(root.right,value);    }      public static void main(String[] args) {        TreeNode root=build();         System.out.println("方法1(递归):前序遍历的结果为:");        preOrder(root);        System.out.println();        System.out.println("方法2(迭代):前序遍历的结果为:");        preOrderNonRecursion(root);        System.out.println();         System.out.println("方法1(递归):中序遍历的结果为:");        inOrder(root);        System.out.println();        System.out.println("方法2(迭代):中序遍历的结果为:");        inorderTraversalNonRecursion(root);        System.out.println();         System.out.println("方法1(递归):后序遍历的结果为:");        postOrder(root);        System.out.println();        System.out.println("方法2(迭代):后序遍历的结果为:");        postOrderNonRecursion(root);        System.out.println();        System.out.println();         System.out.println("层序遍历的结果为:");        levelOrder(root);        System.out.println();        System.out.println();         System.out.println("方法1(递归):当前二叉树一共有:"+getNodes(root)+"个节点数");        System.out.println("方法2(迭代):当前二叉树一共有:"+getNodesNoRecursion(root)+"个节点数");        System.out.println("方法1(递归):当前二叉树一共有:"+getLeafNodes(root)+"个叶子节点数");        System.out.println("方法2(迭代):当前二叉树一共有:"+getLeafNodesNoRecursion(root)+"个叶子节点数");        System.out.println(contains(root,'E'));        System.out.println(contains(root,'P'));        System.out.println("当前二叉树的高度为:"+height(root));        System.out.println("当前二叉树第3层的节点个数为:"+getKLevelNodes(root,3));    }}

如上main引用结果如下:

Java实现二叉树的代码怎么写

到此,相信大家对“Java实现二叉树的代码怎么写”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Java实现二叉树的代码怎么写

本文链接: https://www.lsjlt.com/news/325021.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java实现二叉树的代码怎么写
    本篇内容主要讲解“Java实现二叉树的代码怎么写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java实现二叉树的代码怎么写”吧!以此图为例,完整代码如下://基础二叉树实现//使用左右孩子表示...
    99+
    2023-06-29
  • Java实现二叉树的示例代码(递归&迭代)
    目录1.二叉树基本概念见上节:详解Java中二叉树的基础概念(递归&迭代) 2.本次展示链式存储 以此图为例,完整代码如下: //基础二叉树实现 //使用左右孩子表示法 ...
    99+
    2022-11-13
  • Python实现二叉排序树与平衡二叉树的示例代码
    目录前言1. 二叉排序树1.1 构建一棵二叉排序树1.2 二叉排序树的数据结构1.3 实现二叉排序树类中的方法:2. 平衡二叉排序树2.1 二叉平衡排序树的数据结构3. 总结前言 什...
    99+
    2022-11-10
  • Java平衡二叉树怎么实现
    本篇内容主要讲解“Java平衡二叉树怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java平衡二叉树怎么实现”吧!什么是二叉搜索树简单来说,就是方便搜索的二叉树,是一种具备特定结构的二叉...
    99+
    2023-06-29
  • Python二叉树怎么实现
    本篇内容介绍了“Python二叉树怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python实现二叉树Python实现二叉树可以使用...
    99+
    2023-07-06
  • C++实现二叉树及堆的示例代码
    1 树 树是一种非线性数据结构,它是由n个有限结点组成的具有层次关系的集合。把它叫树是因为它是根朝上,叶子朝下的 来上图瞧瞧 1.1 树的相关名词 2 二叉树 2.1 二叉树的...
    99+
    2022-11-12
  • C++实现验证二叉搜索树代码
    本篇内容主要讲解“C++实现验证二叉搜索树代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++实现验证二叉搜索树代码”吧!验证二叉搜索树Given a binary tree, determ...
    99+
    2023-06-20
  • Java实现多叉树和二叉树之间的互转
    目录前言正文思路分析代码实现总结前言 本文主要介绍如何把一个多叉树转换成二叉树以及把二叉树还原成多叉树。 正文 给出一个多叉树,实现一个函数,这个函数可以把多叉树转成二叉树,再实现一...
    99+
    2023-05-19
    Java 多叉树和二叉树互转 Java 多叉树和二叉树互转
  • java怎么实现二叉树的层次遍历
    这篇文章主要介绍“java怎么实现二叉树的层次遍历”,在日常操作中,相信很多人在java怎么实现二叉树的层次遍历问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java怎么实现二叉树的层次遍历”的疑惑有所帮助!...
    99+
    2023-06-19
  • Java二叉树查询原理实例代码分析
    这篇文章主要介绍“Java二叉树查询原理实例代码分析”,在日常操作中,相信很多人在Java二叉树查询原理实例代码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java二叉树查询原理实例代码分析”的疑惑有所...
    99+
    2023-07-04
  • 如何通过代码实现二叉搜索树
    本篇内容主要讲解“如何通过代码实现二叉搜索树”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何通过代码实现二叉搜索树”吧!首先,二叉搜索树到底是什么二叉搜索树(...
    99+
    2022-10-19
  • java栈实现二叉树的非递归遍历的示例代码
    一般来说遍历二叉树用到递归,但是用Stack进行遍历也是一个不错的方法。 二叉树设置 class Node{ public int val; public Node left...
    99+
    2022-11-11
  • java实现红黑树的代码怎么写
    本篇内容介绍了“java实现红黑树的代码怎么写”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 红黑树ja...
    99+
    2022-10-19
  • 图解二叉树的三种遍历方式及java实现代码
    二叉树(binary tree)是一颗树,其中每个节点都不能有多于两个的儿子。1.二叉树节点作为图的特殊形式,二叉树的基本组成单元是节点与边;作为数据结构,其基本的组成实体是二叉树节点(binary tree node),而边则对应于节点之...
    99+
    2023-05-31
    java 二叉树 遍历
  • Java怎么实现二叉查找树的增删查
    本篇内容介绍了“Java怎么实现二叉查找树的增删查”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!定义二叉查找树(ADT)是一个具有对于树种的...
    99+
    2023-07-02
  • C++怎么实现平衡二叉树
    本篇内容介绍了“C++怎么实现平衡二叉树”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!平衡二叉树Given a binary tree, d...
    99+
    2023-06-20
  • C++怎么实现二叉树及堆
    这篇文章给大家分享的是有关C++怎么实现二叉树及堆的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1 树树是一种非线性数据结构,它是由n个有限结点组成的具有层次关系的集合。把它叫树是因为它是根朝上,叶子朝下的来上图...
    99+
    2023-06-14
  • Java实现树形结构的代码怎么写
    本篇内容介绍了“Java实现树形结构的代码怎么写”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!数据库表结构实现思路拿到有父子节点的集合数据遍...
    99+
    2023-06-30
  • 怎么在Java中实现一个二叉树路径
    这篇文章给大家介绍怎么在Java中实现一个二叉树路径,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。给定一个二叉树,和 目标值 = 5:  1 / \ 2 4&...
    99+
    2023-05-30
    java
  • Java求解二叉树的最近公共祖先实例代码
    一、题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作