按層列印二叉樹

2021-07-31 15:09:50 字數 1830 閱讀 5957

二叉樹是一種常見的資料結構,由n(你》=0)個節點構成,每個節點最多有兩個子二叉樹。

由二叉樹的定義可知,一棵二叉樹由三部分組成:根節點、左子樹和右子樹。二叉樹的遍歷方式有先序遍歷、中序遍歷和後序遍歷。

先序遍歷:首先訪問根節點,然後訪問根節點左孩子,再訪問根節點的右孩子。

中序遍歷:首先訪問根節點左孩子,然後訪問根節點,在訪問根節點的右孩子。

後序遍歷:首先訪問根節點左孩子,然後訪問根節點的右孩子,再訪問根節點。

上述三種遍歷方式原理相同,可以採用遞迴的方式實現遍歷。

這裡要說的是二叉樹的另一種遍歷方法:按層遍歷。

按層遍歷即從二叉樹的根節點開始從上至下從左至右依次訪問節點。

在介紹按層遍歷的實現前先定義一下二叉樹的結構。

class

treenode

}

上述**即定義了二叉樹中每個節點的結構。節點的資料 val、該節點的左孩子 left和該節點的有孩子right。

下面以乙個例項問題實現二叉樹的按層遍歷。

按層遍歷演算法如下:

1、初始化設定乙個佇列;

2、把根節點先入佇列;

3、當佇列非空時:

①、出佇列取得當前隊頭結點,訪問該節點;

②、若該結點的左孩子結點非空,則將該結點的左孩子結點放入佇列。

③、若該結點的右孩子結點非空,則將該結點的右孩子結點放入佇列。

4、結束

問題

給定二叉樹的根結點root,請返回列印結果,結果按照每一層乙個陣列進行儲存,所有陣列的順序按照層數從上往下,且每一層的陣列內元素按照從左往右排列。

/**

* 二叉樹的按層遍歷

* *@param root

* 二叉樹的根節點

*@return 返回乙個二維陣列表示每一層由哪些資料構成

*/public

static

int printtree(treenode root)

// 作用1:儲存每一層的資料集合

// 作用2:轉化為陣列返回

arraylist> array = new arraylist<>();

// 臨時存放每層結點

arraylisttemp;

int last = 0;

int nlast = 0;

// 當前結點

treenode curr;

queuequeue = new linkedlist<>();

// 步驟1 :根節點入佇列

curr = root;

queue.offer(curr);

nlast = curr.val;

last = nlast;

temp = new arraylist<>();

// 步驟二 : 迴圈遍歷二叉樹

while (!queue.isempty())

// 右孩子非空,將右孩子入佇列

if (curr.right != null)

if (curr.val == last)

}// 將array中的結點資料轉換為二維陣列返回

int result = new

int[array.size()];

for (int i = 0; i < result.length; i++)

}return result;

}

按層列印二叉樹

從上到下按層列印二叉樹,同一層結點從左至右輸出,每一層輸出一行 思路 1 廣度遍歷,利用佇列思想 2 要有2個佇列,分別存放當前層的節點 和 下一層的節點 class node 節點類 def init self,val self.val val self.left none self.right ...

二叉樹3 二叉樹按層遍歷列印

題目 有一棵二叉樹,請設計乙個演算法,按照層次列印這棵二叉樹。給定二叉樹的根結點root,請返回列印結果,結果按照每一層乙個陣列進行儲存,所有陣列的順序按照層數從上往下,且每一層的陣列內元素按照從左往右排列。保證結點數小於等於500。思路 對於二叉樹,除了先序遍歷 中序遍歷 後序遍歷之外,常用的遍歷...

按層列印二叉樹 每行列印一層

一,問題介紹 給定一棵二叉樹,按照層序遍歷的順序列印二叉樹。但是要求,每一行列印一層資料。二,演算法分析 借助二叉樹的層序遍歷來實現 使用佇列的先入先出性質保證列印的順序 二叉樹層序遍歷參考 層序列印參考 1 public void printtree binarynoderoot 21if cur...