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

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

二叉樹排序

2020-07-02 10:31 作者:NOOBMb  | 我要投稿

二叉樹排序?你可能沒(méi)聽過(guò)但又很好奇。

先來(lái)了解一下二叉樹

子樹依舊是二叉樹

? 接下來(lái)我們才開始講解二叉樹排序

方法如下:

當(dāng)然,如果要掛的那邊有了節(jié)點(diǎn),那么與那邊子樹的根節(jié)點(diǎn)比較,一直到子樹的根節(jié)點(diǎn)為空節(jié)點(diǎn),再根據(jù)情況掛點(diǎn)。

那么,他好用不?

最好時(shí)間復(fù)雜度:O(n)

平均時(shí)間復(fù)雜度:O(nlog2n)

最差時(shí)間復(fù)雜度:O(n2)

空間復(fù)雜度:O(n)

與快速排序的效率差不多,可以用!

源碼如下:

1 class BinaryTree{?

2 ? ? class Node{ ? ? ? ? ?//聲明一個(gè)節(jié)點(diǎn)類?

3 ? ? ? ? private Comparable data; ?//節(jié)點(diǎn)的數(shù)據(jù)類型為Comparable?

4 ? ? ? ? private Node left; ? //保存左子樹?

5 ? ? ? ? private Node right; ?//保存右子樹?

6 ? ? ? ? public Node(Comparable data){ ? //構(gòu)造函數(shù)?

7 ? ? ? ? ? ? this.data = data;?

8 ?? ? ? ?}?

9 ? ? ? ? public void addNode(Node newNode){

10 ? ? ? ? ? ? //確定是放在左子樹還是右子樹

11 ? ? ? ? ? ? if(newNode.data.compareTo(this.data)<0){ ?//新節(jié)點(diǎn)值小于當(dāng)前節(jié)點(diǎn)

12 ? ? ? ? ? ? ? ? if(this.left == null){

13 ? ? ? ? ? ? ? ? ? ? this.left = newNode; ?//左子樹為空的話,新節(jié)點(diǎn)設(shè)為左子樹

14 ? ? ? ? ? ? ? ? }else{

15 ? ? ? ? ? ? ? ? ? ? this.left.addNode(newNode); //否則繼續(xù)向下判斷

16 ?? ? ? ? ? ? ? ?}

17 ? ? ? ? ? ? }else{ ?//新節(jié)點(diǎn)的值大于或等于當(dāng)前節(jié)點(diǎn)

18 ? ? ? ? ? ? ? ? if(this.right == null){

19 ? ? ? ? ? ? ? ? ? ? this.right = newNode;

20 ? ? ? ? ? ? ? ? }else{

21 ? ? ? ? ? ? ? ? ? ? this.right.addNode(newNode);

22 ?? ? ? ? ? ? ? ?}

23 ?? ? ? ? ? ?}

24 ?? ? ? ?}

25 ? ? ? ??

26 ? ? ? ? public void printNode(){ ?//采用中序遍歷

27 ? ? ? ? ? ? if(this.left != null){ ? //如果不為空先輸出左子樹

28 ? ? ? ? ? ? ? ? this.left.printNode();

29 ?? ? ? ? ? ?}

30 ? ? ? ? ? ? System.out.print(this.data+"\t"); ?//輸出當(dāng)前根節(jié)點(diǎn)

31 ? ? ? ? ? ? if(this.right != null){ ?//輸出右子樹

32 ? ? ? ? ? ? ? ? this.right.printNode(); ??

33 ?? ? ? ? ? ?}

34 ?? ? ? ?}

35 ?? ?}

36 ? ? private Node root; ? ?//表示根元素

37 ? ??

38 ? ? public void add(Comparable data){ ? ?//向二叉樹中插入元素

39 ? ? ? ? Node newNode = new Node(data);

40 ? ? ? ? if(root == null){ ? //沒(méi)有根節(jié)點(diǎn)

41 ? ? ? ? ? ? root = newNode;

42 ? ? ? ? }else{

43 ? ? ? ? ? ? root.addNode(newNode); //判斷放在左子樹還是右子樹

44 ?? ? ? ?}

45 ?? ?}

46 ? ??

47 ? ? public void print(){

48 ? ? ? ? root.printNode(); ? //根據(jù)根節(jié)點(diǎn)輸出

49 ?? ?}

50 }

51?

52 public class TestBinaryTreeSort {

53 ? ? public static void main(String args[]){

54 ? ? ? ? BinaryTree bt = new BinaryTree();

55 ? ? ? ? bt.add(3);

56 ? ? ? ? bt.add(5);

57 ? ? ? ? bt.add(4);

58 ? ? ? ? bt.add(8);

59 ? ? ? ? bt.add(7);

60 ? ? ? ? bt.add(8);

61 ? ? ? ? bt.add(1);

62 ?? ? ? ?bt.print();

63 ?? ?}

64 }

二叉樹排序的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
柳林县| 秭归县| 南昌县| 奇台县| 松原市| 和硕县| 钦州市| 富阳市| 昌黎县| 平昌县| 偃师市| 西丰县| 布拖县| 仙游县| 凤山市| 公安县| 江津市| 瓦房店市| 渭源县| 滨州市| 玛纳斯县| 安远县| 神木县| 铜山县| 奉节县| 行唐县| 周宁县| 渭南市| 阿尔山市| 湛江市| 循化| 包头市| 宜宾市| 河北省| 安图县| 湘阴县| 南木林县| 迁安市| 太白县| 南涧| 晋城|