import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class CreateBinaryTree {public static void main(String[] args) {//初始化数据ArrayList<String> nums = new ArrayList<>();System.out.print("请输入树的总结点数:");Scanner inn = new Scanner(System.in);int sum = inn.nextInt();int i = 0;System.out.print("请输入树的所有结点:");while(i != sum) {Scanner in = new Scanner(System.in);//输入文字String strs = in.nextLine();nums.add(strs);i++;}//实例化对象CreateBinaryTree tree = new CreateBinaryTree();//创建二叉树,并将根节点(root)保存TreeNode root = tree.createTree(nums);//前序遍历(递归)System.out.println("前序遍历:");PreOrder(root);System.out.println();//中序遍历System.out.println("中序遍历:");MiddleOrder(root);System.out.println();//后序遍历System.out.println("前序遍历:");PostOrder(root);}//前序遍历private static void PreOrder(TreeNode root) {if (root != null) {System.out.printf(root.val+"\t");PreOrder(root.left);PreOrder(root.right);}}//中序遍历private static void MiddleOrder(TreeNode root) {if (root != null) {MiddleOrder(root.left);System.out.printf(root.val+"\t");MiddleOrder(root.right);}}//后序遍历private static void PostOrder(TreeNode root) {if (root != null) {PostOrder(root.left);PostOrder(root.right);System.out.printf(root.val+"\t");}}private static TreeNode createTree(ArrayList<String> nums) {List<TreeNode> list = new ArrayList<>();//将元素(int)保存到TreeNode中,直接对元素(Treenood(int))进行树创建的操作for (int i = 0;i<nums.size();i++) {if(!nums.get(i).equals("null")) {TreeNode node = new TreeNode(Integer.parseInt(nums.get(i)));list.add(node);}else{list.add(null);}}TreeNode root;for (int i = 0;i<list.size()/2;i++) {//只用遍历到数组长度的一半root = list.get(i);//指向当前要进行操作(添加左右子节点)的节点if(root != null) {TreeNode left = list.get(i * 2 + 1);//添加左子节点root.left = left;if (i * 2 + 2 < list.size()) {//需要判断是否已经添加完毕TreeNode right = list.get(i * 2 + 2);//添加右子节点root.right = right;}}}return list.get(0);//返回根节点(因为二叉树是从List的第0个元素开始,即0处的元素为根节点)}
}//结点结构
class TreeNode {int val;public TreeNode(int x) {val = x;}TreeNode left;TreeNode right;
}

要点:
1、首先我们需要创建一个String类型的动态数组,因为我们想要创造的树的总结点个数是不确定的(该数组用于接收键盘输入)
2、即便我们的二叉树可能不是完全二叉树,但我们也按照完全二叉树的格式,并以层序遍历的顺序去依次输入树的各节点数值。将不是正常整型数值的节点数值输入null。
3、前提都做好后,我们开始正式构建二叉树,我们将步骤1和2获得的数组用于构建一个元素
类型为二叉树节点形式的数组。
①、List list = new ArrayList<>(); 创建一个元素类型为节点类型的数组。
②、由于二叉树的节点构造器是以整型数据作为参数的,所以我们循环遍历1、2的数组,将各元素取出作为节点的val值。
4、开始构建二叉树:通过循环遍历步骤3得到的数组,这里涉及到构建二叉树的原理,详见下方链接:
https://www.cnblogs.com/mosakashaka/p/14247323.html
5、前中后序遍历原理是递归。

java键盘输入构建任意二叉树并实现前序、中序、后续遍历相关推荐

  1. python数据结构二叉树的前序,中序,后续遍历与推导

    根据先序中序求后续 其余同理,多画图就理解了

  2. 根据前序和后序遍历构造二叉树(附前序中序代码)

    889. 根据前序和后序遍历构造二叉树 前序和中序 道理相同 改变一些细节就可以了,在最后附上了前序中序的代码 题目描述 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值 ...

  3. 【笔记】二叉树递归算法和非递归算法的实现 先序/中序/后续遍历 打印结点以及顺序数 构造二叉树

    递归先序遍历和中序遍历 先序: void preorder(bnode *t){if(t!=NULL){ visit(t);preorder(t->lchild); preorder(t-> ...

  4. 二叉树题目 ----7 前序中序遍历构造二叉树

    前序中序遍历构造二叉树 思路 在前序中找根结点 根据根结点 + 中序,分成左右两棵子树 根据子树长度,把前序分成左右两颗子树 递归处理子树 /*** Definition for a binary t ...

  5. 二叉树的前序,中序,后续(非递归版本)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.前序 二.后序 三.中序 总结 前言 二叉树的非递归版本的前序中序后序在面试中也经常考,必须熟练掌握! 下面将会讲 ...

  6. 二叉树已知前序中序求后序(超简单)(java)

    首先解题思路来自b站某高手,思路清奇,请看官先看视频: 无脑秒解!已知先/后序遍历与中序遍历,求后/先序遍历._哔哩哔哩_bilibili大佬轻喷,这个题做很简单,但是想做的快做的准应该没有比这更快的 ...

  7. 二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...

    二叉树的先序,中序,后序遍历以及线索二叉树的遍历 (2008-05-04 17:52:49) 标签: 杂谈 C++ 二叉树的先序,中序,后序遍历以及线索二叉树的遍历 头文件 //*********** ...

  8. 二叉树前序中序后续线索树_后序线索二叉树怎么画 线索二叉树基本操作详解 - 办公软件 - 服务器之家...

    后序线索二叉树怎么画 线索二叉树基本操作详解 发布时间:2017-05-23 来源:服务器之家 遍历二叉树是以一定规则将二叉树中结点排列成一个线性序列,得到二叉树中结点的先序,中序或后序序列.这实际上 ...

  9. 二叉树顺序存储-实现前序中序后序遍历

    一.顺序存储二叉树简介 二叉树的存储结构有两种,分别为顺序存储和链式存储. 二叉树的顺序存储,指的是使用顺序表(数组)存储二叉树.只有完全二叉树才可以使用顺序表存储.因此,如果我们想顺序存储普通二叉树 ...

最新文章

  1. IDEA JAVA gradle等常见工具/包 踩坑记录
  2. 还原sql server数据库时,无法获得对数据库的独占访问权
  3. 95-30-017-Channel-NioServerSocketChannel
  4. centos sftp客户端 c 源码_Redis第3课:如何使用 Redis客户端
  5. Android如何解析Intent
  6. MySQL服务器地址为空,C++/MySQL - 通过主机地址访问数据库时'未知的MySQL服务器主机';没有IP...
  7. markdown转换html源码,利用Nodejs+Express将Markdown转换为HTML(附源码)
  8. android view绘制速度,关于android ui的优化 view 的绘制速度
  9. 程序员必备的10款工具软件!最后一款简直绝了!
  10. windows server 2012 安装 VC2015 安装失败0x80240017解决方法
  11. 计算机Word2010在线做题,Word2010题库(答案)试题.doc
  12. 热门应用借微信玩花样:一大波红包正在来袭
  13. AR体感互动产品大合集
  14. 一别西湖,又是江南烟雨
  15. 网络管理软件都有哪些,目前好用的网络管理软件
  16. myeclipse2017CI的SVNE170001错误
  17. Vmware WorkStation的三种联网方式
  18. OSError: [WinError 216] 该版本的 %1 与您运行的 Windows 版本不兼容。
  19. 解析OpenSSL漏洞:影响巨大 两年前已存在
  20. qq气泡php接口,h5实现QQ聊天气泡的实例介绍

热门文章

  1. 从Minio断点续传资源,支持边下载边看
  2. PVA超细颗粒清洗现象
  3. 常识-java获取本机ipv6地址以及关闭临时ipv6地址
  4. 抖音快手短视频平台的区别在哪
  5. 4个Python实战项目,让你瞬间读懂Python!
  6. 朴素贝叶斯(Naiv Bayes)算法简介
  7. iOS-NSTimer的3种创建方式
  8. 三星s8怎么分屏操作_日渐加快的生活节奏 让三星Galaxy Z Fold2 5G帮你轻松应对
  9. Dockerfile构建LAMP基础环境镜像
  10. 给.exe程序替换图标