下面代码包含了二叉树的建立过程,以及三种遍历方法了递归实现,代码中还利用队列实现了层次遍历。

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);
}
}

二叉树的建立&&前中后遍历(递归实现)&&层次遍历的更多相关文章

  1. 前中后序递归遍历树的体会 with Python

    前序:跟->左->右 中序:左->根->右 后序:左>右->根 采用递归遍历时,编译器/解释器负责将递归函数调用过程压入栈并保护现场,在不同位置处理根节点即可实现不 ...

  2. [leetcode] 二叉树的前序,中序,后续,层次遍历

    前序遍历 [144] Binary Tree Preorder Traversal 递归遍历 使用递归,先保存父节点的值,再对左子树进行遍历(递归),最后对右子树进行遍历(递归) vector< ...

  3. 二叉树前中后/层次遍历的递归与非递归形式(c++)

    /* 二叉树前中后/层次遍历的递归与非递归形式 */ //*************** void preOrder1(BinaryTreeNode* pRoot) { if(pRoot==NULL) ...

  4. [C++] 非递归实现前中后序遍历二叉树

    目录 前置技能 需求描述 binarytree.h 具体实现 binarytree.cpp main.cpp 网上代码一搜一大片,大同小异咯. 书上的函数实现代码甚至更胜一筹,而且抄一遍就能用,唯一问 ...

  5. Qt实现 动态化遍历二叉树(前中后层次遍历)

    binarytree.h 头文件 #ifndef LINKEDBINARYTREE_H #define LINKEDBINARYTREE_H #include<c++/algorithm> ...

  6. 【C++】二叉树的遍历(前中后)- 迭代法

    力扣题目:https://leetcode-cn.com/problems/binary-tree-inorder-traversal/ 今天自己琢磨了很久如何不用递归将二叉树的遍历写出来,于是乎写出 ...

  7. kmp(前中后最长相同长度)

    http://acm.hdu.edu.cn/showproblem.php?pid=4763 Theme Section Time Limit: 2000/1000 MS (Java/Others)  ...

  8. java实现二叉树的前中后遍历(递归和非递归)

    这里使用下图的二叉树作为例子: 首先建立树这个类: public class Node { private int data; private Node leftNode; private Node ...

  9. POJ 2255 Tree Recovery && Ulm Local 1997 Tree Recovery (二叉树的前中后序遍历)

    链接:poj.org/problem?id=2255 本文链接:http://www.cnblogs.com/Ash-ly/p/5463375.html 题意: 分别给你一个二叉树的前序遍历序列和中序 ...

随机推荐

  1. 使用Typescript重构axios(十八)——请求取消功能:总体思路

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  2. NOIP原题 斗地主(20190804)

    题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关 系根据牌的数码表示如下:3<4&l ...

  3. Kubernetes4-web管理界面

    一.简介 1.环境 环境还是前面的环境 2.Kubernetes Dashboard web界面 kubernetes dashboard (仪表盘)是一个将通用的基于web的监控和操作界面加入kub ...

  4. 最新JetBrains PyCharm 使用教程--安装教程(一)

    安装过程 ​ ​ ​ ​ ​ ​ ​ Pycharm  激活码 license server选项里边输入:http://intellij.mandroid.cn/ ​

  5. VM 使用问题 | 安装失败->>注册表

    下午乌龙了一回,本来就知道注册表都卸载的乱乱的 以为安装上即可,越弄越糊涂 无法安装.... 查了注册表,发现那些都删除了 手动安装实在太过麻烦,弄了一早上. 如图:未能解决 ​ ​ ​ 后使用了清洁 ...

  6. 小白学 Python(22):time 和 calendar 模块简单使用

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  7. java多线程与线程并发三:线程同步通信

    本文章内容整理自:张孝祥_Java多线程与并发库高级应用视频教程. 有些时候,线程间需要传递消息,比如下面这道面试题: 子线程循环10次,然后主线程循环100次,然后又回到子线程循环50次,然后再回到 ...

  8. [spark程序]统计人口平均年龄(HDFS文件)(详细过程)

    一.题目描述 (1)请编写Spark应用程序,该程序可以在分布式文件系统HDFS中生成一个数据文件peopleage.txt,数据文件包含若干行(比如1000行,或者100万行等等)记录,每行记录只包 ...

  9. ffmpeg centos yum安装

    CentOS 6&7安装ffmpeg   CentOS 6和7安装方法是不一样的,下面分别说明: 安装前都需要先安装epel扩展源 yum -y install epel-release ce ...

  10. fastjason常用方法

    背景 fastjson爆出重大漏洞,攻击者可使整个业务瘫痪 漏洞描述 常用JSON组件FastJson存在远程代码执行漏洞,攻击者可通过精心构建的json报文对目标服务器执行任意命令,从而获得服务器权 ...