二叉树的建立&&前中后遍历(递归实现)&&层次遍历
下面代码包含了二叉树的建立过程,以及三种遍历方法了递归实现,代码中还利用队列实现了层次遍历。
import java.util.LinkedList;
import java.util.Queue; class TreeNode<K> {
TreeNode<K> left, right;
K key;
public TreeNode(K k) {
left = null; right = null; key = k;
}
} class BinaryTree<K extends Comparable<K> > { //添加 extends Comparable<K>后,K对象可以进行比较。
TreeNode<K> root;
public BinaryTree() {
root = null;
}
public void createTree(TreeNode<K> node, K data) { //建立二叉树
if(root == null) {
root = new TreeNode<K>(data);
} else {
if(data.compareTo(node.key) < 0) {
if(node.left == null)
node.left = new TreeNode<K>(data);
else
createTree(node.left, data);
} else {
if(node.right == null)
node.right = new TreeNode<K>(data);
else
createTree(node.right, data);
}
}
}
public void preOrder(TreeNode<K> root) { //前序遍历
if(root != null) {
System.out.println(root.key);
preOrder(root.left);
preOrder(root.right);
}
}
public void inOrder(TreeNode<K> root) { //中序遍历
if(root != null) {
inOrder(root.left);
System.out.println(root.key);
inOrder(root.right);
}
}
public void postOrder(TreeNode<K> root) { //后序遍历
if(root != null) {
postOrder(root.left);
postOrder(root.right);
System.out.println(root.key);
}
}
public void levelOrder(TreeNode<K> root) { //层次遍历
if(root != null) {
Queue<TreeNode<K>> queue = new LinkedList<TreeNode<K>>();
queue.offer(root);
while (!queue.isEmpty()) {
TreeNode<K> node = queue.poll();
System.out.println(node.key);
if(node.left != null)
queue.offer(node.left);
if(node.right != null)
queue.offer(node.right);
}
}
}
}
public class TestClass {
public static void main(String[] args) {
int[] array = {6, 8, 7, 5, 2, 5};
BinaryTree<Integer> bt = new BinaryTree<Integer>();
for (int i = 0; i < array.length; i++) {
bt.createTree(bt.root, array[i]);
}
// bt.preOrder(bt.root);
// bt.inOrder(bt.root);
// bt.postOrder(bt.root);
bt.levelOrder(bt.root);
}
}
二叉树的建立&&前中后遍历(递归实现)&&层次遍历的更多相关文章
- 前中后序递归遍历树的体会 with Python
前序:跟->左->右 中序:左->根->右 后序:左>右->根 采用递归遍历时,编译器/解释器负责将递归函数调用过程压入栈并保护现场,在不同位置处理根节点即可实现不 ...
- [leetcode] 二叉树的前序,中序,后续,层次遍历
前序遍历 [144] Binary Tree Preorder Traversal 递归遍历 使用递归,先保存父节点的值,再对左子树进行遍历(递归),最后对右子树进行遍历(递归) vector< ...
- 二叉树前中后/层次遍历的递归与非递归形式(c++)
/* 二叉树前中后/层次遍历的递归与非递归形式 */ //*************** void preOrder1(BinaryTreeNode* pRoot) { if(pRoot==NULL) ...
- [C++] 非递归实现前中后序遍历二叉树
目录 前置技能 需求描述 binarytree.h 具体实现 binarytree.cpp main.cpp 网上代码一搜一大片,大同小异咯. 书上的函数实现代码甚至更胜一筹,而且抄一遍就能用,唯一问 ...
- Qt实现 动态化遍历二叉树(前中后层次遍历)
binarytree.h 头文件 #ifndef LINKEDBINARYTREE_H #define LINKEDBINARYTREE_H #include<c++/algorithm> ...
- 【C++】二叉树的遍历(前中后)- 迭代法
力扣题目:https://leetcode-cn.com/problems/binary-tree-inorder-traversal/ 今天自己琢磨了很久如何不用递归将二叉树的遍历写出来,于是乎写出 ...
- kmp(前中后最长相同长度)
http://acm.hdu.edu.cn/showproblem.php?pid=4763 Theme Section Time Limit: 2000/1000 MS (Java/Others) ...
- java实现二叉树的前中后遍历(递归和非递归)
这里使用下图的二叉树作为例子: 首先建立树这个类: public class Node { private int data; private Node leftNode; private Node ...
- POJ 2255 Tree Recovery && Ulm Local 1997 Tree Recovery (二叉树的前中后序遍历)
链接:poj.org/problem?id=2255 本文链接:http://www.cnblogs.com/Ash-ly/p/5463375.html 题意: 分别给你一个二叉树的前序遍历序列和中序 ...
随机推荐
- 如何编译安装Linux内核
操作系统环境 VMware workstation15 Pro ubuntu18.04 LTS 待编译内核5.3.10版本 内核下载地址 kernel.org 环境配置 在正式编译前需要安装部分软件. ...
- Java描述设计模式(18):享元模式
本文源码:GitHub·点这里 || GitEE·点这里 一.使用场景 应用代码 public class C01_InScene { public static void main(String[] ...
- Linux系统重启Oracle-12c步骤
Linux系统重启Oracle-12c步骤 1. 使用oracle用户登录: [root@Oracle-12c /]# su – oracle 2. 登录oracle登陆管理员账号: [oracle@ ...
- 格式工厂转化成mp4 avc格式 暴风影音不能播放的解决方法
格式工厂转化成mp4 avc格式 暴风影音不能播放的解决方法 先转成其他mp4 确保能播放 然后再转成avc
- Python文件打包exe教程——Pyinstaller(亲测有效)
今天将要解决一个问题,如何打包Pyhon文件 众所周知,Python文件的后缀名为“.py” 所以执行Python文件的要求之一便是具有python环境. 偶尔特殊情况,或者运行一些比较简单的工具,但 ...
- 014.Kubernetes二进制部署docker
一 部署docker 1.1 部署docker组件 docker 运行和管理容器,kubelet 通过 Container Runtime Interface (CRI) 与它进行交互. 1.2 下载 ...
- 使用Rider中搭建specflow+xunit+selenium对web页面进行自动化功能测试环境
运行rider,创建测试解决方案,选择xunit,点击create创建 导入包,由于本人使用chrome浏览器(需先下载好对应的浏览器驱动),所以导入了selenium.webdriver.c ...
- 做HTML静态页面时遇到的问题总结
1. 如果所示,问题:“首页”和“闲置”文字部分位于table中部 解决方法:需要取消vertical-align:middle属性,将其设置为vertical-align:top,并将文本的高度改为 ...
- nyoj 12-喷水装置(二)(贪心)
12-喷水装置(二) 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:10 submit:30 题目描述: 有一块草坪,横向长w,纵向长为h,在它的橫 ...
- ArcGIS API For Javascript :双屏(多屏)地图联动的方法
在遇到地图对比的应用场景下,我们需要双屏地图或者多屏地图来满足我们的业务需求. 解决思路:首先生成两份(多份)地图,然后通过监听地图缩放拖拽,用地图四至将不同的地图对象做绑定,实现多地图联动. 前端部 ...