最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

java模擬二叉樹實現(xiàn)排序

2022-08-05 16:06 作者:虛云幻仙  | 我要投稿

/**
* 使用樹形結(jié)構(gòu)--二叉樹實現(xiàn)排序
* 二叉樹為結(jié)點的度最大為2的樹,每個結(jié)點最多有兩個子結(jié)點
* 二叉排序樹的定義:1.根結(jié)點的左子樹的值小于根結(jié)點 2.根結(jié)點的右子樹的值大于根結(jié)點 3.左右子樹也各為一顆二叉排序樹
* 二叉排序樹的中序遍歷的結(jié)果為一個有序的集合
*/

public class SortByBinaryTree<E extends Integer> {
? ?//模擬二叉排序樹 ? 對Integer類型進行排序
? ?private static final class Node<E extends Integer>{
? ? ? ?//泛型類定義E小于等于Integer 類內(nèi)使用E不再聲明extends
? ? ? ?E item;
? ? ? ?//存放元素
? ? ? ?Node<E> left;
? ? ? ?//左子樹
? ? ? ?Node<E> right;
? ? ? ?//右子樹
? ? ? ?public Node(E item, Node<E> left, Node<E> right) {
? ? ? ? ? ?this.item = item;
? ? ? ? ? ?this.left = left;
? ? ? ? ? ?this.right = right;
? ? ? ?}
? ?}

? ?Node<E> root;
? ?//類中僅記錄根結(jié)點,每次操作通過根結(jié)點遞進向下調(diào)用
? ?public void add(E e){
? ? ? ?if (e==null)return;
? ? ? ?//返回類型void的方法內(nèi)return不加參數(shù)會結(jié)束方法
? ? ? ?if (root==null){
? ? ? ? ? ?root = new Node<>(e,null,null);
? ? ? ?}else {
? ? ? ? ? ?Node<E> n = getParentNode(e);
? ? ? ? ? ?if (n==null)return;
? ? ? ? ? ?if (e.intValue() < n.item.intValue()) {
? ? ? ? ? ? ? ?//E extends Integer 所以可以使用.intValue()
? ? ? ? ? ? ? ?n.left = new Node<>(e, null, null);
? ? ? ? ? ?} else {
? ? ? ? ? ? ? ?n.right = new Node<>(e, null, null);
? ? ? ? ? ?}
? ? ? ?}
? ?}
? ?private Node<E> getParentNode(E e){
? ? ? ?int eInt = e.intValue();
? ? ? ?int nInt;
? ? ? ?for (Node<E> n = root;eInt != (nInt=n.item.intValue());){
? ? ? ? ? ?//在判定條件中賦值
? ? ? ? ? ?if (eInt < nInt){
? ? ? ? ? ? ? ?if (n.left==null){
? ? ? ? ? ? ? ? ? ?return n;
? ? ? ? ? ? ? ?}else {
? ? ? ? ? ? ? ? ? ?n=n.left;
? ? ? ? ? ? ? ?}
? ? ? ? ? ?} else {
? ? ? ? ? ? ? ?if (n.right==null){
? ? ? ? ? ? ? ? ? ?return n;
? ? ? ? ? ? ? ?}else {
? ? ? ? ? ? ? ? ? ?n=n.right;
? ? ? ? ? ? ? ?}
? ? ? ? ? ?}
? ? ? ?}
? ? ? ?return null;
? ? ? ?//重復(fù)元素不添加
? ?}

? ?public void traversal(){
? ? ? ?//遍歷traversal
? ? ? ?if (root==null){
? ? ? ? ? ?System.out.println("當前無元素");
? ? ? ? ? ?return;
? ? ? ?}
? ? ? ?traversal(root);
? ?}
? ?private void traversal(Node<E> n){
? ? ? ?if (n!=null){
? ? ? ? ? ?traversal(n.left);
? ? ? ? ? ?System.out.print(n.item+", ");
? ? ? ? ? ?traversal(n.right);
? ? ? ?}
? ?}

? ?public static void main(String[] args) {
? ? ? ?Random r = new Random();
? ? ? ?Integer[] arr = new Integer[10];
? ? ? ?for (int i = 0;i<10;i++){
? ? ? ? ? ?arr[i] = r.nextInt(40);
? ? ? ?}
? ? ? ?SortByBinaryTree<Integer> sort = new SortByBinaryTree<>();
? ? ? ?for (Integer i:arr){
? ? ? ? ? ?sort.add(i);
? ? ? ?}
? ? ? ?System.out.println(Arrays.toString(arr));
? ? ? ?//打印原數(shù)組,結(jié)果為[28, 3, 14, 36, 12, 25, 15, 5, 37, 22]
? ? ? ?sort.traversal();
? ? ? ?//排序結(jié)果為3,5,12,14,15,22,25,28,36,37,
? ?}
}

java模擬二叉樹實現(xiàn)排序的評論 (共 條)

分享到微博請遵守國家法律
惠水县| 历史| 台东县| 南木林县| 桃园市| 射阳县| 石棉县| 台江县| 巫溪县| 宾阳县| 陇南市| 海口市| 舞钢市| 崇明县| 灌南县| 中西区| 固阳县| 邹城市| 永顺县| 隆昌县| 徐汇区| 临沧市| 三门县| 大庆市| 本溪市| 天水市| 收藏| 含山县| 梅州市| 若尔盖县| 内乡县| 莒南县| 格尔木市| 耿马| 阳高县| 苗栗县| 潼关县| 新巴尔虎左旗| 任丘市| 宁强县| 嘉峪关市|