要求:
按照二叉樹分層輸出
思路:
用乙個佇列儲存下一行的節點
當佇列不為空的時候,出佇列輸出節點值,並把該節點的左右節點入佇列
**:
//層次遍歷
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 ...