java键盘输入构建任意二叉树并实现前序、中序、后续遍历
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键盘输入构建任意二叉树并实现前序、中序、后续遍历相关推荐
- python数据结构二叉树的前序,中序,后续遍历与推导
根据先序中序求后续 其余同理,多画图就理解了
- 根据前序和后序遍历构造二叉树(附前序中序代码)
889. 根据前序和后序遍历构造二叉树 前序和中序 道理相同 改变一些细节就可以了,在最后附上了前序中序的代码 题目描述 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值 ...
- 【笔记】二叉树递归算法和非递归算法的实现 先序/中序/后续遍历 打印结点以及顺序数 构造二叉树
递归先序遍历和中序遍历 先序: void preorder(bnode *t){if(t!=NULL){ visit(t);preorder(t->lchild); preorder(t-> ...
- 二叉树题目 ----7 前序中序遍历构造二叉树
前序中序遍历构造二叉树 思路 在前序中找根结点 根据根结点 + 中序,分成左右两棵子树 根据子树长度,把前序分成左右两颗子树 递归处理子树 /*** Definition for a binary t ...
- 二叉树的前序,中序,后续(非递归版本)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.前序 二.后序 三.中序 总结 前言 二叉树的非递归版本的前序中序后序在面试中也经常考,必须熟练掌握! 下面将会讲 ...
- 二叉树已知前序中序求后序(超简单)(java)
首先解题思路来自b站某高手,思路清奇,请看官先看视频: 无脑秒解!已知先/后序遍历与中序遍历,求后/先序遍历._哔哩哔哩_bilibili大佬轻喷,这个题做很简单,但是想做的快做的准应该没有比这更快的 ...
- 二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...
二叉树的先序,中序,后序遍历以及线索二叉树的遍历 (2008-05-04 17:52:49) 标签: 杂谈 C++ 二叉树的先序,中序,后序遍历以及线索二叉树的遍历 头文件 //*********** ...
- 二叉树前序中序后续线索树_后序线索二叉树怎么画 线索二叉树基本操作详解 - 办公软件 - 服务器之家...
后序线索二叉树怎么画 线索二叉树基本操作详解 发布时间:2017-05-23 来源:服务器之家 遍历二叉树是以一定规则将二叉树中结点排列成一个线性序列,得到二叉树中结点的先序,中序或后序序列.这实际上 ...
- 二叉树顺序存储-实现前序中序后序遍历
一.顺序存储二叉树简介 二叉树的存储结构有两种,分别为顺序存储和链式存储. 二叉树的顺序存储,指的是使用顺序表(数组)存储二叉树.只有完全二叉树才可以使用顺序表存储.因此,如果我们想顺序存储普通二叉树 ...
最新文章
- IDEA JAVA gradle等常见工具/包 踩坑记录
- 还原sql server数据库时,无法获得对数据库的独占访问权
- 95-30-017-Channel-NioServerSocketChannel
- centos sftp客户端 c 源码_Redis第3课:如何使用 Redis客户端
- Android如何解析Intent
- MySQL服务器地址为空,C++/MySQL - 通过主机地址访问数据库时'未知的MySQL服务器主机';没有IP...
- markdown转换html源码,利用Nodejs+Express将Markdown转换为HTML(附源码)
- android view绘制速度,关于android ui的优化 view 的绘制速度
- 程序员必备的10款工具软件!最后一款简直绝了!
- windows server 2012 安装 VC2015 安装失败0x80240017解决方法
- 计算机Word2010在线做题,Word2010题库(答案)试题.doc
- 热门应用借微信玩花样:一大波红包正在来袭
- AR体感互动产品大合集
- 一别西湖,又是江南烟雨
- 网络管理软件都有哪些,目前好用的网络管理软件
- myeclipse2017CI的SVNE170001错误
- Vmware WorkStation的三种联网方式
- OSError: [WinError 216] 该版本的 %1 与您运行的 Windows 版本不兼容。
- 解析OpenSSL漏洞:影响巨大 两年前已存在
- qq气泡php接口,h5实现QQ聊天气泡的实例介绍