java鏈表生成樹,java 實現鏈表

本文目錄一覽:

用java怎麼構造一個二叉樹呢?

java構造二叉樹,可以通過鏈表來構造,如下代碼:

public class BinTree {

public final static int MAX=40;

BinTree []elements = new BinTree[MAX];//層次遍歷時保存各個節點

    int front;//層次遍歷時隊首

    int rear;//層次遍歷時隊尾

private Object data; //數據元數

private BinTree left,right; //指向左,右孩子結點的鏈

public BinTree()

{

}

public BinTree(Object data)

{ //構造有值結點

   this.data = data;

   left = right = null;

}

public BinTree(Object data,BinTree left,BinTree right)

{ //構造有值結點

   this.data = data;

   this.left = left;

   this.right = right;

}

public String toString()

{

   return data.toString();

}

//前序遍歷二叉樹

public static void preOrder(BinTree parent){ 

     if(parent == null)

      return;

     System.out.print(parent.data+” “);

     preOrder(parent.left);

     preOrder(parent.right);

}

//中序遍歷二叉樹

public void inOrder(BinTree parent){

   if(parent == null)

      return;

   inOrder(parent.left);

   System.out.print(parent.data+” “);

     inOrder(parent.right);

}

//後序遍歷二叉樹

public void postOrder(BinTree parent){

   if(parent == null)

    return;

   postOrder(parent.left);

   postOrder(parent.right);

   System.out.print(parent.data+” “);

}

// 層次遍歷二叉樹 

public void LayerOrder(BinTree parent)

     elements[0]=parent;

     front=0;rear=1;

   while(frontrear)

   {

    try

    {

        if(elements[front].data!=null)

        {

           System.out.print(elements[front].data + ” “);

           if(elements[front].left!=null)

          elements[rear++]=elements[front].left;

           if(elements[front].right!=null)

          elements[rear++]=elements[front].right;

           front++;

        }

    }catch(Exception e){break;}

   }

}

//返回樹的葉節點個數

public int leaves()

{

   if(this == null)

    return 0;

   if(left == nullright == null)

    return 1;

   return (left == null ? 0 : left.leaves())+(right == null ? 0 : right.leaves());

}

//結果返回樹的高度

public int height()

{

   int heightOfTree;

   if(this == null)

    return -1;

   int leftHeight = (left == null ? 0 : left.height());

   int rightHeight = (right == null ? 0 : right.height());

   heightOfTree = leftHeightrightHeight?rightHeight:leftHeight;

   return 1 + heightOfTree;

}

//如果對象不在樹中,結果返回-1;否則結果返回該對象在樹中所處的層次,規定根節點為第一層

public int level(Object object)

{

   int levelInTree;

   if(this == null)

    return -1;

   if(object == data)

    return 1;//規定根節點為第一層

   int leftLevel = (left == null?-1:left.level(object));

   int rightLevel = (right == null?-1:right.level(object));

   if(leftLevel0rightLevel0)

    return -1;

   levelInTree = leftLevelrightLevel?rightLevel:leftLevel;

   return 1+levelInTree;

  

}

//將樹中的每個節點的孩子對換位置

public void reflect()

{

   if(this == null)

    return;

   if(left != null)

    left.reflect();

   if(right != null)

    right.reflect();

   BinTree temp = left;

   left = right;

   right = temp;

}

// 將樹中的所有節點移走,並輸出移走的節點

public void defoliate()

{

   if(this == null)

    return;

   //若本節點是葉節點,則將其移走

   if(left==nullright == null)

   {

    System.out.print(this + ” “);

    data = null;

    return;

   }

   //移走左子樹若其存在

   if(left!=null){

    left.defoliate();

    left = null;

   }

   //移走本節點,放在中間表示中跟移走…

   String innerNode += this + ” “;

   data = null;

   //移走右子樹若其存在

   if(right!=null){

    right.defoliate();

    right = null;

   }

}

   /**

* @param args

*/

public static void main(String[] args) {

   // TODO Auto-generated method stub

   BinTree e = new BinTree(“E”);

   BinTree g = new BinTree(“G”);

   BinTree h = new BinTree(“H”);

   BinTree i = new BinTree(“I”);

   BinTree d = new BinTree(“D”,null,g);

  

   BinTree f = new BinTree(“F”,h,i);

   BinTree b = new BinTree(“B”,d,e);

   BinTree c = new BinTree(“C”,f,null);

   BinTree tree = new BinTree(“A”,b,c);

  

        System.out.println(“前序遍歷二叉樹結果: “);

        tree.preOrder(tree);

        System.out.println();

        System.out.println(“中序遍歷二叉樹結果: “);

        tree.inOrder(tree);

        System.out.println();

        System.out.println(“後序遍歷二叉樹結果: “);

        tree.postOrder(tree);

        System.out.println();

      System.out.println(“層次遍歷二叉樹結果: “);

     tree.LayerOrder(tree);

     System.out.println();

        System.out.println(“F所在的層次: “+tree.level(“F”));

        System.out.println(“這棵二叉樹的高度: “+tree.height());

         System.out.println(“————————————–“);

         tree.reflect();

          System.out.println(“交換每個節點的孩子節點後……”);

          System.out.println(“前序遍歷二叉樹結果: “);

        tree.preOrder(tree);

        System.out.println();

        System.out.println(“中序遍歷二叉樹結果: “);

        tree.inOrder(tree);

        System.out.println();

        System.out.println(“後序遍歷二叉樹結果: “);

        tree.postOrder(tree);

        System.out.println();

      System.out.println(“層次遍歷二叉樹結果: “);

     tree.LayerOrder(tree);

     System.out.println();

        System.out.println(“F所在的層次: “+tree.level(“F”));

        System.out.println(“這棵二叉樹的高度: “+tree.height());

}

hashmap鏈表大於多少後成為紅黑樹

java8不是用紅黑樹來管理hashmap,而是在hash值相同的情況下(且重複數量大於8),用紅黑樹來管理數據。 紅黑樹相當於排序數據。可以自動的使用二分法進行定位。性能較高。

一般情況下,hash值做的比較好的話基本上用不到紅黑樹。

java中沒有指針,怎麼構建一個鏈表樹

java中要用到鏈表結構的話有LinkedList、LinkedHashSet和LinkedHashMap等集合可供使用,這些集合的底層都是由鏈表實現的

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/185943.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-26 21:08
下一篇 2024-11-26 21:08

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • 利用Python實現兩個鏈表合併為一個有序鏈表

    對於開發工程師來說,實現兩個鏈表合併為一個有序鏈表是必須掌握的技能之一。Python語言在鏈表處理上非常便利,本文將從多個方面詳細闡述如何利用Python實現兩個鏈表合併為一個有序…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29

發表回復

登錄後才能評論