資料結構演算法爬坑日記十二

2021-10-23 20:58:48 字數 2762 閱讀 8432

陣列儲存與樹儲存得相互轉換,就是將資料內容也就是二叉樹節點以陣列方式儲存,通過二叉樹得方式來獲取陣列得下標,進而獲取資料

特點:(n為二叉樹得第幾個元素,從0開始 對應陣列下標)

** 通常只考慮完全二叉樹

** 第n個元素得左子節點為 2n+

1 右子節點為 2

(n+1)*

* 第n個元素得父節點為(n+1)

/2**示例 (中序後序遍歷與之類似)

** 順序儲存二叉樹類

//順序儲存二叉樹

public

class

arraybinarytree

//前序遍歷 index為陣列索引

public

void

pre(

int index)

else

//向右前序遍歷if(

(2* index +2)

< arr.length)}}

}** 測試類

public

class

arraybinarytreetest

; arraybinarytree tree=

newarraybinarytree

(arr)

; tree.

pre(0)

;}}

n個節點的二叉鍊錶含有n+

1個空指標域,將空指標域指向節點在某種遍歷次序下的前驅後繼節點,這個指標叫做線

索,加了線索的二叉鍊錶為線索鍊錶,對應的二叉樹為線索二叉樹,分為前序線索二叉樹,中序線索二叉樹,後序線索

二叉樹**實現

** 線索二叉樹節點類

//線索化二叉樹節點

public

class

threadedbinarytreenode

@override

public string tostring()

';}}

** 線索二叉樹類

//線索化二叉樹

public

class

threadedbinarytree

//向左中序遞迴

midthreaded

(node.left)

;//線索化當前節點

if(node.left == null)

if(pre != null && pre.right == null)

pre = node;

//指向前乙個節點的指標後移

//向右中序遞迴

midthreaded

(node.right);}

//線索化二叉樹中序遍歷

public

void

mid(threadedbinarytreenode node)

system.out.

println

(current)

;//如果右節點為後繼節點就一直輸入

while

(current.righttype ==1)

//不是後繼節點就將當前節點替換成右節點

current = current.right;}}

//前序線索化

public

void

prethreaded

(threadedbinarytreenode node)

//線索化當前節點

if(node.left == null)

if(pre != null && pre.right == null)

pre = node;

//指向前乙個節點的指標後移

//如果沒有前驅節點就向左前序遞迴

if(node.lefttype!=1)

//如果沒有後繼節點就向右前序遞迴

if(node.righttype!=1)

}//線索化二叉樹前序遍歷

public

void

pre(threadedbinarytreenode node)

//判斷是否到了最後乙個節點

if(current.right==null)

//當前節點後移

current = current.left;}}

//後序線索化

public

void

postthreaded

(threadedbinarytreenode node)

//向左前序遞迴

postthreaded

(node.left)

;//向右前序遞迴

postthreaded

(node.right)

;//線索化當前節點

if(node.left == null)

if(pre != null && pre.right == null)

pre = node;

//指向前乙個節點的指標後移

}//線索化二叉樹後序遍歷,採用遞迴,非遞迴暫時不會

public

void

post

(threadedbinarytreenode node)

if(node.right != null && node.righttype !=1)

system.out.

println

(node);}

}** 測試類

public

class

threadedbinarytreetest

}

資料結構演算法爬坑日記一

線性結構 最常用的資料結構,特點是資料元素之間存在一對一的線性關係 分倆種儲存結構 1.順序儲存結構 又稱為順序表,儲存元素是連續的 2.鏈式儲存結構 又稱為鍊錶,儲存元素不一定是連續的,元素節點中存放資料元素以及相鄰元素的位址結構 常見線性資料結構 陣列 佇列 鍊錶 棧 非線性結構 常見二維陣列 ...

資料結構演算法爬坑日記六

回溯法 也叫向前試探法,試著尋找正確的求解,當探索到某一步不符合規則時,便回退到上一步進行重新選擇,直到獲取預期的解法 問題描述 在8 8的西洋棋棋盤上,放置八個皇后且八個皇后不能互相攻擊 思路 先將第乙個放在第一行第一列,然後將第二個放在第二行第一列,檢查是否滿足規則,如果滿足則進入第三個的放 置...

資料結構演算法爬坑日記八

思想 通過一次排序將一組資料分為兩部分,一部分全部比另一部分小,然後對兩部分分別再進行快排,迴圈此操作,直到不能再分割,便得到乙個有序序列 實現 快速排序 public class quicksort sort arr,0,arr.length 1 system.out.println arrays...