算法:comparable比较器的排序原理实现(二叉树中序排序)
Comparable比较器排序远离实现
package test.java.api.api13; /**
* 手工实现二叉树的比较算法: 第一遍感觉很神秘,但是真正自己写下来,就感觉很简单,理解就好: 主要一下两点: 第一点:【设置一个根节点】
* 第二点:新增节点处理:比根节点小,放在左子树(如果左子树不存在,直接放在左子树,如果存在,用已经存在的左子树的节点递归调用)
* 第三点:新增节点处理:比根节点大或等于,放在右子树(如果右子树不存在,直接放在右子树,如果存在,用已经存在的右子树的节点递归调用)
* 第四点:打印输出:已经排好序的数据用中序遍历:左→根→右,进行输出
*
* @author gmq
* @dateTime 2015/11/1
*
*/
public class ComparableDemo03 { public static void main(String[] args) {
BinaryTree<Integer> bt = new BinaryTree<Integer>();
bt.add(8);
bt.add(7);
bt.add(6);
bt.add(11);
bt.add(8);
bt.add(9);
bt.add(3); System.out.println("排序之后的结果:");
bt.print();
}
} /**
* 二叉树算法类
*
* @author gmq
*
*/
class BinaryTree<T> { class Node { // 声明一个节点类Node
private Comparable<T> data; // 保存具体的内容
private Node left; // 左子树
private Node right; // 右子树 public Node(Comparable<T> data) {
this.data = data;
} public void addNode(Node newNode) {
// 确定是放在左子树还是右子树
if (newNode.data.compareTo((T) this.data) < 0) { // 内容小,放在左子树
if (this.left == null) { // 判断左子树是否存在
this.left = newNode; // 直接将新的节点设为左子树
} else {
this.left.addNode(newNode); // 继续向下判断
}
} if (newNode.data.compareTo((T) this.data) >= 0) { // 放在右子树
if (this.right == null) { // 判断右子树是否存在
this.right = newNode; // 右子树不存在:直接将新的节点放在右子树
} else {
this.right.addNode(newNode); // 继续向下判断
}
}
} public void print() { // 输出的时候采用中序遍历: 左→根→右
// 先遍历左节点
if (this.left != null) {
left.print();
} // 再遍历根节点
System.out.print(this.data + "\t"); // 最后遍历右节点
if (this.right != null) {
this.right.print();
}
}
} private Node root; // 跟节点 public void add(Comparable<T> data) {
Node newNode = new Node(data);
if (root == null) {
root = newNode;
} else {
root.addNode(newNode);
}
} public void print() {
this.root.print(); // 通过根节点输出
}
}
算法:comparable比较器的排序原理实现(二叉树中序排序)的更多相关文章
- 二叉树中序遍历 (C语言实现)
在计算机科学中,树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构.二叉树是每个节点最多有两个子树的有序树.通常子树被称作“左子树”(left subtre ...
- 94 Binary Tree Inorder Traversal(二叉树中序遍历Medium)
题目意思:二叉树中序遍历,结果存在vector<int>中 解题思路:迭代 迭代实现: /** * Definition for a binary tree node. * struct ...
- [leetcode]94. Binary Tree Inorder Traversal二叉树中序遍历
Given a binary tree, return the inorder traversal of its nodes' values. Example: Input: [1,null,2,3] ...
- 10.26最后的模拟DAY2 改造二叉树[中序遍历+严格递增的最长不下降子序列]
改造二叉树 [题目描述] 小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作“左孩子”和“右孩子”.二叉树被用作二叉搜索树和二叉堆.随后他 ...
- [Leetcode] Binary tree inorder traversal二叉树中序遍历
Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary tre ...
- lintcode.67 二叉树中序遍历
二叉树的中序遍历 描述 笔记 数据 评测 给出一棵二叉树,返回其中序遍历 您在真实的面试中是否遇到过这个题? Yes 样例 给出二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,3, ...
- C++版 - 剑指offer 面试题63:二叉搜索树的第k个结点(二叉树中序遍历的应用) 题解
面试题 63:二叉搜索树的第k个结点 题目:给定一颗二叉搜索树,请找出其中的第k大的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 (见下面的图1) 中,按结点数值大小顺序第三个结点的值 ...
- LeetCode:94_Binary Tree Inorder Traversal | 二叉树中序遍历 | Medium
题目:Binary Tree Inorder Traversal 二叉树的中序遍历,和前序.中序一样的处理方式,代码见下: struct TreeNode { int val; TreeNode* l ...
- UVA 548.Tree-fgets()函数读入字符串+二叉树(中序+后序遍历还原二叉树)+DFS or BFS(二叉树路径最小值并且相同路径值叶子节点权值最小)
Tree UVA - 548 题意就是多次读入两个序列,第一个是中序遍历的,第二个是后序遍历的.还原二叉树,然后从根节点走到叶子节点,找路径权值和最小的,如果有相同权值的就找叶子节点权值最小的. 最后 ...
随机推荐
- 快速安装 GitLab 并汉化
转载:http://www.jianshu.com/p/7a0d6917e009
- JQuery中的小技巧,,,连载中。。。
获取下拉框中选中项的文本等操作 jQuery获取Select元素,并选择的Text和Value: 1.获取select 选中的 text : $("#ddlRegType").f ...
- Xcode7企业版打包
今天才发现Xcode7企业账号打包竟然和以前稍微不一样了,一时手残,先把公司服务器以前的ipa包删了,吓得我的小心脏呢 首先选中然后选archive然后点export然后然后选中include man ...
- 【UVA 1451】Average
题 题意 求长度为n的01串中1占总长(大于L)的比例最大的一个子串起点和终点. 分析 前缀和s[i]保存前i个数有几个1,[j+1,i] 这段区间1的比例就是(s[i]-s[j])/(i-j),于是 ...
- Fedora21下安装cuda7.5
Fedora21装cuda7.5 首先制作启动U盘.装好fedora21后别做任何update等yum和rpm操作,按照下面步骤走. 其中遇到用UEFI模式安装cuda时,系统一定要求提供公钥和私钥, ...
- BZOJ-1196 公路修建问题 最小生成树Kruskal+(二分??)
题目中一句话,最大费用最小,这么明显的二分的提示(by 以前morestep学长的经验传授)...但完全没二分,1A后感觉很虚.. 1196: [HNOI2006]公路修建问题 Time Limit: ...
- 【poj2079】 Triangle
http://poj.org/problem?id=2079 (题目链接) 题意 求凸包内最大三角形面积 Solution 旋转卡壳. 只会n²的做法,但是竟然过了.就是枚举每一个点,然后旋转卡壳另外 ...
- CVE-2014-0160 Heartbleed Vul Analysis && OpenSSL Cryptographic Software Library Bug
目录 . Heartbleed漏洞简介 . 漏洞造成的风险和影响 . 漏洞的测试.POC . OpenSSL漏洞源代码分析 . 防御.修复方案 . 从漏洞中得到的攻防思考 1. Heartbleed漏 ...
- UVA1629Cake slicing(记忆化搜索)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51190 紫书P305 题意分析:一个矩形蛋糕上有好多个樱桃,现在要 ...
- List<T> 序列化与反序列化
[Serializable] public class OrderHead { public String OrderId { get; set; } public String OrderName ...