日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

完全二叉树的JAVA实现(以及非递归遍历方法)

發布時間:2025/3/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 完全二叉树的JAVA实现(以及非递归遍历方法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?一個用于實現初始化指定個數的完全二叉樹,以及兩個非遞歸的深度優先遍歷,和廣度優先遍歷

  • package?fifth;?
  • ?
  • import?java.util.Random;?
  • ?
  • public?class?Tool{?
  • ????public?static?Random?rand=?new?Random();?
  • }?
  • ?
  • -------------------------------------------------------------?
  • ?
  • package?fifth;?
  • ?
  • import?java.util.EmptyStackException;?
  • import?java.util.LinkedList;?
  • import?java.util.Queue;?
  • import?java.util.Stack;?
  • ?
  • ?
  • public?class?Tree?{?
  • ????//用來實現非遞歸的廣度優先查詢與構造需要的隊列?
  • ????public?static?Queue<Tree>?que=?new?LinkedList<Tree>();?
  • ????//用來實現深度優先查詢需要的棧?
  • ????public?static?Stack<Tree>?stack=new?Stack<Tree>();?
  • ????//存儲的節點信息?
  • ????public?int?data;?????????????????????????????????????
  • ????public?Tree?leftNode=null;?
  • ????public?Tree?rightNode=null;?
  • ?????
  • ????//用來實現遍歷的臨時節點?
  • ????public?Tree?cTree=null;?
  • ?????
  • ?????
  • ????public?Tree()?{?
  • ????????data=Tool.rand.nextInt(200);?
  • ????????display();?
  • ????}?
  • ?????
  • ????public?void?display(){?
  • ????????System.out.print(data+",");?
  • ????}?
  • ?????
  • ????/**?
  • ?????*?創建一個以這個節點為定點的完全二叉樹?
  • ?????*?這個中初始化方法類似于廣度優先遍歷?
  • ?????*?@param?count?要創建的完全二叉樹的節點個數?
  • ?????*/?
  • ????public?void?initTree(int?count){?
  • ????????que.add(this);?
  • ????????while((cTree=que.poll())!=null)?
  • ????????{?
  • ????????????//當樹中需要創建節點數小于兩個時,那么就應該創造完葉子節點然后返回?
  • ????????????//當樹中需要創建節點個數大于兩個時,那么就應該把創造的子節點放入隊列中,等待創建它的子節點?
  • ????????????if(count-2>0)?
  • ????????????{?
  • ?????????????????
  • ????????????????cTree.leftNode=new?Tree();?
  • ????????????????que.add(cTree.leftNode);?
  • ????????????????count--;?
  • ????????????????cTree.rightNode=new?Tree();?
  • ????????????????que.add(cTree.rightNode);?
  • ????????????????count--;?
  • ????????????}?
  • ????????????else?if(count==0)?
  • ????????????{?
  • ????????????????break;?
  • ????????????}?
  • ????????????else?if(count==1)?
  • ????????????{?
  • ????????????????cTree.leftNode=new?Tree();?
  • ????????????????count--;?
  • ????????????????break;?
  • ????????????}?
  • ????????????else?
  • ????????????{?
  • ????????????????cTree.leftNode=new?Tree();?
  • ????????????????cTree.rightNode=new?Tree();?
  • ????????????????count-=2;?
  • ????????????}?
  • ?????????????????
  • ????????}?
  • ????}?
  • ????/**?
  • ?????*?非遞歸的廣度優先遍歷,用的隊列來實現?
  • ?????*/?
  • ????public?void?breadthSearch(){?
  • ????????System.out.print('\n'+"非遞歸廣度優先遍歷:");?
  • ????????//清空隊列,同時把自己放在隊列的第一個元素?
  • ????????que.clear();que.add(this);?
  • ????????while((cTree=que.poll())!=null)?
  • ????????{?
  • ????????????//訪問隊列中的數據?
  • ????????????cTree.display();?
  • ????????????if(cTree.leftNode!=null)?
  • ????????????{?
  • ????????????????que.add(cTree.leftNode);?
  • ????????????}?
  • ????????????if(cTree.rightNode!=null)?
  • ????????????{?
  • ????????????????que.add(cTree.rightNode);?
  • ????????????}?
  • ????????}?
  • ?????????
  • ????}?
  • ?????
  • ????/**?
  • ?????*?用于棧來實現的非遞歸深度優先遍歷?前序遍歷?
  • ?????*/?
  • ????public?void?deepFirstSearch(){?
  • ????????System.out.print('\n'+"非遞歸深度優先遍歷,前序遍歷:");?
  • ????????//首先把自己壓入棧底?
  • ????????this.display();?
  • ????????cTree=this;?
  • ????????while(cTree!=null)?
  • ????????{?
  • ????????????if(cTree.leftNode!=null)?
  • ????????????{?
  • ????????????????stack.add(cTree);?
  • ????????????????cTree.leftNode.display();?
  • ????????????????cTree=cTree.leftNode;?
  • ????????????}?
  • ????????????else?
  • ????????????{?
  • ????????????????while(cTree.rightNode==null)?
  • ????????????????{?
  • ????????????????????try?
  • ????????????????????{?
  • ????????????????????????cTree=stack.pop();?
  • ????????????????????}?
  • ????????????????????catch(EmptyStackException?e)?
  • ????????????????????{?
  • ????????????????????????return;?
  • ????????????????????}?
  • ?????????????????????
  • ????????????????}?
  • ????????????????cTree.rightNode.display();?
  • ????????????????cTree=cTree.rightNode;?
  • ????????????}?
  • ????????}?
  • ?????????
  • ????}?
  • ?
  • ????public?static?void?main(String[]?args)?{?
  • ????????Tree?tree=?new?Tree();?
  • ????????tree.initTree(10);?
  • ????????System.out.println();?
  • ????????tree.leftNode.display();?
  • ????????tree.rightNode.display();?
  • ????????tree.breadthSearch();?
  • ????????tree.deepFirstSearch();?
  • ????}?
  • }?
  • ?

    轉載于:https://blog.51cto.com/joeymiu/683757

    總結

    以上是生活随笔為你收集整理的完全二叉树的JAVA实现(以及非递归遍历方法)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。