二叉树的建立&&前中后遍历(递归实现)&&层次遍历
下面代码包含了二叉树的建立过程,以及三种遍历方法了递归实现,代码中还利用队列实现了层次遍历。
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 题意: 分别给你一个二叉树的前序遍历序列和中序 ...
随机推荐
- Vue+element UI实现“回到顶部”按钮组件
介绍 这是一个可以快速回到页面顶部的组件,当用户浏览到页面底部的时候,通过点击按钮,可快速回到页面顶部. 使用方法 由于该组件是基于element-UI进行二次封装的,所以在使用该组件时请务必安装el ...
- 【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(3) - 使用Conductor切换页面
前两章中, 我们已经实现了这个图书管理系统的登录窗口, 并实施了完善的单元测试. 该是时候回过头来关注我们的主窗口了. 一个功能丰富的系统一般会有多个页面, 我们图书管理系统虽然是"简易&q ...
- jquery设置html5音量的方法
jquery设置html5音量的方法<pre> setTimeout(function() { alert(1); $('#music1')[0].volume = 0; setTimeo ...
- js正则匹配的出链接地址
content为需要匹配的值 var b=/<a([\s]+|[\s]+[^<>]+[\s]+)href=(\"([^<>"\']*)\"| ...
- SVN积极拒绝解决办法
出现以上情况多数为Linux里面的svn自启动没有设置好,一般是自启文件被废弃了,就算在里面添加自启代码也无效,想要兼容旧版本使用这个文件,只需在root管理员模式下输入代码chmod +x /etc ...
- Python 常用模块系列(2)--time module and datatime module
import time print (help(time)) #time帮助文档 1. time模块--三种时间表现形式: 1° 时间戳--如:time.time() #从python创立以来,到当 ...
- nyoj 48-小明的调查作业(set)
48-小明的调查作业 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:15 submit:29 题目描述: 小明的老师布置了一份调查作业,小明想在学校 ...
- nyoj 76-超级台阶 (递推)
76-超级台阶 内存限制:64MB 时间限制:1000ms 特判: No 通过数:8 提交数:12 难度:3 题目描述: 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共 ...
- 使用ndk交叉编译android各平台版本的第三方库
只要弄明白了ndk-bundle的目录结构,交叉编译的基本原理就可以自行编写脚本去编译了.从仓库拿下代码包后,一般在linux平台下编译当前平台使用的库,只要使用其自动配置脚本configure进行平 ...
- python中的__str__和__repr__方法
如果要把一个类的实例变成 str,就需要实现特殊方法__str__(): class A(object): def __init__(self,name,age): self.name=name se ...