經典二叉樹演算法題(Java實現)

2021-09-20 12:48:40 字數 2638 閱讀 2617

要求:

按照二叉樹分層輸出

思路:

用乙個佇列儲存下一行的節點

當佇列不為空的時候,出佇列輸出節點值,並把該節點的左右節點入佇列

**:

//層次遍歷

static

void

levelshow

(treenode node)

}

要求:

層次遍歷二叉樹,並分層輸出

思路:

在層次遍歷的基礎上

另外用兩個變數分別儲存當前行的最後乙個節點currentlastnode,和下一行的最後乙個節點nextlastnode

每次節點入佇列,當做它是該行的最後乙個節點,把它賦給nextlastnode

判斷當前出佇列的節點是否為currentlastnode,如果是,輸出換行,把nextlastnode賦給currentlastnode,開始下一行判斷

否則繼續出佇列

**:

//層次遍歷分層輸出

static

void

levelshow1

(treenode node)

//右節點進佇列

if(p.right!=null)

//如當前遍歷的節點是記錄行的最後乙個節點,證明當前行已經遍歷結束了,輸出換行符

//把下一行的最後乙個節點賦給當前行最後乙個節點

if(currentlastnode==p)

}}

要求:

用陣列構建一棵哈夫曼樹

思路:

1把陣列的所有數字儲存為節點存到list裡面

2對list排序,每次移除list裡面最小的兩個節點,新建乙個節點,把這兩個節點作為它的左右節點,把這個新的節點放到list裡面

3重複步驟2知道list裡面只剩乙個節點,這個節點就是哈夫曼樹的根節點

**:

//陣列構建哈夫曼樹

static treenode haff

(int

arr)

while

(list.

size()

>1)

treenode node = list.

get(0)

;return node;

}

要求:

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

(劍指offer原題–重建二叉樹)

思路:

1通過前序遍歷可以找到根節點,建立根節點

2通過根節點可以在後序遍歷找到,左子樹的前序遍歷和右子樹的前序遍歷的長度

3通過左右子樹前序遍歷的長度可以在前序遍歷中找到,左右子樹的前序遍歷

4然後通過遞迴可求根節點的左節點和右節點,返回根節點

例如:前序遍歷1,2,4,7,3,5,6,8找到1是根節點,通過1在後續遍歷4,7,2,1,5,3,8,6可以確定:

左子樹的後續遍歷為4,7,2,右子樹為5,3,8,6,

回到前序遍歷,確定左子樹的前序遍歷就是2,4,7,右子樹的前序遍歷為3,5,6,8

**:

public treenode reconstructbinarytree

(int

pre,

int[

] last)

//左子樹的後續遍歷

int[

] leftlast = arrays.

copyofrange

(last,

0,index)

;//右子樹的後續遍歷

int[

] rightlast = arrays.

copyofrange

(last,index+

1,last.length)

;//左子樹的前序遍歷

int[

] leftpre = arrays.

copyofrange

(pre,

1,index+1)

;//右子樹的前序遍歷

int[

] rightpre = arrays.

copyofrange

(pre,index+

1,pre.length)

;

rootnode.left =

reconstructbinarytree

(leftpre,leftlast)

; rootnode.right =

reconstructbinarytree

(rightpre,rightlast)

;return rootnode;

}

java 二叉樹實現演算法

package zxx.new 二叉樹演算法實現 author zhaoxin version public class binarytree public binarytree object objects public boolean insert object o else else if c...

二叉樹經典題系列 二叉樹的映象

二叉樹的映象 將乙個二叉樹的左右子樹,調換位置。即下圖的形式 遞迴的思想是 從根節點的左右子樹進行交換,然後以根節點的左子樹為根節點,而後以根節點的右結點為根節點,進行左右子樹交換。遇到空節點或葉節點直接返回。下面求二叉樹映象的函式 實現 templatevoid mirrotree treenod...

java實現二叉樹演算法 查詢

構造樹如下 其中二叉樹節點類 二叉樹節點 public class btnode public btnode char key,btnode left,btnode right public char getkey public void setkey char key public btnode ...