java 二叉树的创建 遍历
本来说复习一下BFS和DFS,辗转就来到了二叉树...本文包括二叉树的创建和遍历
概念
数据:1 2 3 4 5 6 7生成一颗二叉树
上面的数是数据,不是位置,要区别一下数据和位置
红色的代表位置,黑色的代表数据,数据是通过数组给的
看红色的标记,每一个父节点的左儿子是 当前值*2+1 右儿子是 当前值*2+2,我们是从0开始编号的,如果是-1开始编号,则为x*2 、x*2+1
有了上面这个公式就会变得很简单,既然要生成一颗数,那么每个节点是必不可少的,就要定义一个节点类,里面包含当前值,左右儿子,左右儿子一个个往下指,就形成了 一棵树
在生成二叉树的时候,考虑到最后一个节点,上图数组的长度是8,此时没有右节点,如果为9,就有右节点
得到结果:length%2 == 0 只有左节点 length%2 == 1 左右都有
遍历
先序遍历:根左右
中序遍历:左根右
后序遍历:左右根
有一个很简单的记忆方法,先中后代表根的位置,左右相对位置永远不变
在程序里采用递归的方式进行实现
1 package tree; 2 3 import java.util.LinkedList; 4 import java.util.List; 5 6 public class Tree { 7 8 private static class Node{ 9 Node left; 10 Node right; 11 int val; 12 13 Node(int data){ 14 left = null; 15 right = null; 16 val = data; 17 } 18 } 19 20 //生成一颗二叉树 21 public static List<Node> CreatTree(int[] array){ 22 23 List<Node> nodelist = new LinkedList<>(); 24 //每个位置转换成节点 25 for(int i = 0; i<array.length; i++){ 26 nodelist.add(new Node(array[i])); 27 } 28 //按照关系建立二叉树 29 for(int i=0; i<array.length/2-1; i++){ 30 //左孩子 31 nodelist.get(i).left = nodelist.get(i*2+1); 32 //右孩子 33 nodelist.get(i).right = nodelist.get(i*2+2); 34 } 35 //最后一个节点特殊处理 36 int index = array.length / 2 - 1; 37 //左孩子 38 nodelist.get(index).left = nodelist.get(index*2+1); 39 //如果长度是奇数,那就有右孩子 40 if(array.length%2 == 1){ 41 nodelist.get(index).right = nodelist.get(index*2+2); 42 } 43 44 return nodelist; 45 } 46 47 //先序遍历(根、左、右) 48 public static void preOrderTraverse(Node node){ 49 if(node == null) return; 50 //根 51 System.out.print(node.val + " "); 52 //左 53 preOrderTraverse(node.left); 54 //右 55 preOrderTraverse(node.right); 56 } 57 58 //中序遍历 59 public static void inOrderTraverse(Node node){ 60 if(node == null) return; 61 //左 62 inOrderTraverse(node.left); 63 //根 64 System.out.print(node.val + " "); 65 //右 66 inOrderTraverse(node.right); 67 } 68 69 //后序遍历 70 public static void postOrderTraverse(Node node){ 71 if(node == null) return; 72 //左 73 postOrderTraverse(node.left); 74 //右 75 postOrderTraverse(node.right); 76 //根 77 System.out.print(node.val + " "); 78 } 79 80 81 public static void main(String[] args) { 82 int[] array = { 1, 2, 3, 4, 5, 6, 7, 8 }; 83 //获取根节点 84 Node root = Tree.CreatTree(array).get(0); 85 86 System.out.println("先序遍历:"); 87 preOrderTraverse(root); 88 System.out.println(); 89 90 System.out.println("中序遍历:"); 91 inOrderTraverse(root); 92 System.out.println(); 93 94 System.out.println("后序遍历:"); 95 postOrderTraverse(root); 96 System.out.println(); 97 } 98 99 }
运行结果:
转载于:https://www.cnblogs.com/ccxka/p/9600520.html
java 二叉树的创建 遍历相关推荐
- java二叉树的创建,遍历及其他方法
2019独角兽企业重金招聘Python工程师标准>>> package tree;import java.util.Stack;/**二叉树**/ public class Bina ...
- Java 二叉树后序遍历(递归/非递归)
Java 二叉树后序遍历(递归/非递归) 简介: 遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次. 设L.D.R分 ...
- Java 二叉树中序遍历(递归/非递归)
Java 二叉树中序遍历(递归/非递归) 中序遍历 代码实现 递归方式 非递归方式 简介: 遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访 ...
- java二叉树的深度优先遍历_二叉树的广度优先遍历、深度优先遍历的递归和非递归实现方式...
1 packageSolution;2 3 importjava.util.LinkedList;4 importjava.util.Queue;5 importjava.util.Stack;6 7 ...
- Java二叉树后序遍历:递归与迭代
二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树:左子树和右子树又同样都是二叉树. 如下便是一棵二叉树: 二叉树的后序遍历方式为: 1. 如果根节点有左 ...
- Java二叉树逆序遍历_二叉树遍历小结
二叉树遍历小结 声明 0 二叉树遍历概述 二叉树遍历:按照既定序,对每个节点仅访问一次: 二叉树非递归遍历思想:参考这篇博文,核心思想是存在重合元素的局部有序保证整体有序,由于二叉树的结构特点,二叉树 ...
- java 二叉树的各种遍历
先序中序后序,递归与非递归,默认构造的排序二叉树 package Tree;import java.util.Stack;public class BinaryTree {class Node{int ...
- Java实现二叉树的创建、递归/非递归遍历
近期复习数据结构中的二叉树的相关问题,在这里整理一下 这里包含: 1.二叉树的先序创建 2.二叉树的递归先序遍历 3.二叉树的非递归先序遍历 4.二叉树的递归中序遍历 5.二叉树的非递归中序遍历 6. ...
- 《Java版本二叉树的创建和前序中序后序层次遍历》--递归版本
目录 1.二叉树的递归创建(少说废话,直接上code) 2.二叉树的前序遍历.中序遍历.后续遍历 3.最后贴出所有代码 效果图 1.二叉树的递归创建(少说废话,直接上code) //前序遍历的创建二叉 ...
- Java创建遍历二叉树(递归)并求树高及叶节点个数(代码全)
在学习树的操作之后,我们就可以对数这种数据结构进行创建和使用了,话不多说,直接上代码 PS:为了代码复用和通用性,采用接口然后打包了整个工程,存储数据定义为泛型 一.接口及链结点定义 package ...
最新文章
- AI颠覆经济世界作用被夸大?影响远比媒体头条报道更加复杂
- 数值和字符串互相转换
- tomcat部署web應用時涉及到的基本概念
- 计算机组装维修期末考试题,2014计算机组装维修期末考试题(1)
- 五子棋项目结束总结_居家活动系列总结
- android中activity布局,Activity布局初步(一)
- BZOJ 2818GCD
- requests请求报字符编码异常信息
- C#多线程学习(五) 多线程的自动管理(定时器)
- android 自定义view 水波纹进度球
- oracle11g数据库登录01017,【数据库管理】ORA-01017错误及部分的常见典型案例-Go语言中文社区...
- 印象笔记导入html笔记,Evernote Importer|印象笔记导入
- linux常用的英文单词收集
- 「建模学习」3DsMAX贴图制作方法,足球贴图案例详细教程
- Photoshop CS6版本安装及破解教程
- 设计模式简介 - Introduction to Design Patterns
- 孩子被人欺负了,要不要打回去?非常赞同这位宝妈的做法
- 《HelloGitHub》第 74 期
- 检测PE文件的有效性
- 智能机器人编程有必要学吗?
热门文章
- 如何有逻辑的,简单清晰的回应问题
- R语言中文社区世界读书日图书推荐(含赠书活动)
- C#原子性运算 interlocked.compareExchanged
- android - Unable to add window -- token null is not for an application的解决方案
- java.lang.ClassNotFoundException: org.springframework.web.util.WebAppRootListener
- 解决 git branch -a 无法全部显示远程的分支,只显示master分支
- php之简单的文件管理(基本功能
- 深入理解Azure自动扩展集VMSS(3)
- ife task0003学习笔记(三):JavaScript闭包
- 【Java中的网络编程】