国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java 完全二叉樹的構建與四種遍歷方法示例

java 完全二叉樹的構建與四種遍歷方法示例

2020-08-25 10:43Gonjian Java教程

本篇文章主要介紹了java 完全二叉樹的構建與四種遍歷方法示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

本來就是基礎知識,不能丟的太干凈,今天竟然花了那么長的時間才寫出來,記一下。

有如下的一顆完全二叉樹

java 完全二叉樹的構建與四種遍歷方法示例

先序遍歷結果應該為:1  2  4  5  3  6  7

中序遍歷結果應該為:4  2  5  1  6  3  7

后序遍歷結果應該為:4  5  2  6  7  3  1

層序遍歷結果應該為:1  2  3  4  5  6  7

二叉樹的先序遍歷、中序遍歷、后序遍歷其實都是一樣的,都是執行遞歸操作。

我這記錄一下層次遍歷吧:層次遍歷需要用到隊列,先入隊在出隊,每次出隊的元素檢查是其是否有左右孩子,有則將其加入隊列,由于利用隊列的先進先出原理,進行層次遍歷。

下面記錄下完整代碼(Java實現),包括幾種遍歷方法:

java" id="highlighter_865772">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
 
 
/**
 * 定義二叉樹節點元素
 * @author bubble
 *
 */
class Node { 
  public Node leftchild;
  public Node rightchild;
  public int data;
 
  public Node(int data) {
    this.data = data;
  }
 
}
 
public class TestBinTree {
  
  /**
   * 將一個arry數組構建成一個完全二叉樹
   * @param arr 需要構建的數組
   * @return 二叉樹的根節點
   */
  public Node initBinTree(int[] arr) {
    if(arr.length == 1) {
      return new Node(arr[0]);
    }
    List<Node> nodeList = new ArrayList<>();
    
    for(int i = 0; i < arr.length; i++) {
      nodeList.add(new Node(arr[i]));
    }
    int temp = 0;
    while(temp <= (arr.length - 2) / 2) { //注意這里,數組的下標是從零開始的
      if(2 * temp + 1 < arr.length) {
        nodeList.get(temp).leftchild = nodeList.get(2 * temp + 1);
      }
      if(2 * temp + 2 < arr.length) {
        nodeList.get(temp).rightchild = nodeList.get(2 * temp + 2);
      }
      temp++;
    }
    return nodeList.get(0);
    }
 
  /**
   * 層序遍歷二叉樹,,并分層打印
   * @param root 二叉樹根節點
   *
   */
   public void trivalBinTree(Node root) {
    Queue<Node> nodeQueue = new ArrayDeque<>();
    nodeQueue.add(root);
    Node temp = null;
    int currentLevel = 1//記錄當前層需要打印的節點的數量
    int nextLevel = 0;//記錄下一層需要打印的節點的數量
    while ((temp = nodeQueue.poll()) != null) {
      if (temp.leftchild != null) {
        nodeQueue.add(temp.leftchild);
        nextLevel++;
        
      }
      if (temp.rightchild != null) {
        nodeQueue.add(temp.rightchild);
        nextLevel++;
      }
      System.out.print(temp.data + " ");
      currentLevel--;
      if(currentLevel == 0) {
        System.out.println();
        currentLevel = nextLevel;
        nextLevel = 0;
      }
    }
  }
  
 
   /**
    * 先序遍歷
    * @param root 二叉樹根節點
    */
    public void preTrival(Node root) {
      if(root == null) {
        return;
      }
      System.out.print(root.data + " ");
      preTrival(root.leftchild);
      preTrival(root.rightchild);
    }
    /**
     * 中序遍歷
     * @param root 二叉樹根節點
     */
    public void midTrival(Node root) {
      if(root == null) {
        return;
      }
      midTrival(root.leftchild);
      System.out.print(root.data + " ");
      midTrival(root.rightchild);
    }
    /**
     * 后序遍歷
     * @param root 二叉樹根節點
     */
    public void afterTrival(Node root) {
      if(root == null) {
        return;
        
      }
      afterTrival(root.leftchild);
      afterTrival(root.rightchild);
      System.out.print(root.data + " ");
    }
    
    
    public static void main(String[] args) {
      TestBinTree btree = new TestBinTree();
      int[] arr = new int[] {1,2,3,4,5,6,7};
      Node root = btree.initBinTree(arr);
      System.out.println("層序遍歷(分層打印):");
      btree.trivalBinTree(root);
      System.out.println("\n先序遍歷:");
      btree.preTrival(root);
      System.out.println("\n中序遍歷:");
      btree.midTrival(root);
      System.out.println("\n后序遍歷:");
      btree.afterTrival(root);
      
    }
    
   }

遍歷結果:

java 完全二叉樹的構建與四種遍歷方法示例

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/gonjan-blog/p/6504668.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲大片av| 亚洲日本国产 | 成人免费毛片aaaaaa片 | 久久久精品国产 | 日韩蜜桃 | 亚洲成人一区二区三区 | 天天躁人人躁人人躁狂躁 | 久久人人爽爽爽人久久久 | 成人免费视频在线观看 | 全部免费毛片在线播放 | 毛片网页 | 亚洲视频aaa | 免费观看视频毛片 | 日本黄色大片 | 伊人中文字幕 | 久久中文字幕一区二区三区 | 日本中文字幕在线播放 | 色吧网站 | 国产色| 日韩欧美天堂 | www.久草| 成人综合久久 | 国产精品一区二区av | 99国产精品99久久久久久 | 久久精品一区二区三区四区 | 国产日韩欧美综合 | 伊人激情 | 国产精品免费网站 | 久艹在线 | 亚洲av毛片一区二二区三三区 | 久久综合久久受 | 国产精品自拍视频 | 黄色大片一级 | 久久国产精品久久久久久电车 | 依人在线观看 | 国产高清不卡 | 成人免费视频网站在线观看 | 超碰毛片 | 欧美一区在线观看视频 | 免费的黄视频 | 99精品网站 |