資料結構和演算法 22 之線索二叉樹

2021-10-04 11:03:14 字數 3062 閱讀 4038

學習資料結構和演算法的日常demo

二叉樹遍歷存在的問題

線索二叉樹基本介紹

中序線索二叉樹思路分析

**實現

public

class

treenode

@override

public string tostring()

';}public

intgetvalue()

public

intgetlefttype()

public

void

setlefttype

(int lefttype)

public

intgetrighttype()

public

void

setrighttype

(int righttype)

public

void

setvalue

(int value)

public treenode getleft()

public

void

setleft

(treenode left)

public treenode getright()

public

void

setright

(treenode right)

// 前序遍歷

public

void

preorder()

// 遞迴右子樹if(

this

.right != null)

}// 中序遍歷

public

void

infixorder()

// 輸出父節點

system.out.

print

(this

.value +

" ")

;// 遞迴右子樹if(

this

.right != null)

}// 後序遍歷

public

void

postorder()

// 遞迴右子樹if(

this

.right != null)

// 輸出父節點

system.out.

print

(this

.value +

" ");}

}public

class

threadedbinarytree

public

void

setroot

(treenode root)

// 對二叉樹中序線索化

// node即為當前需要線索化的節點

public

void

threadednodes

(treenode node)

// 1.線索化左子樹

threadednodes

(node.

getleft()

);// 2.線索化當前節點

// 處理當前節點的前驅節點

if(node.

getleft()

== null)

// 處理後繼節點

if(pre != null && pre.

getright()

== null)

// 每處理乙個節點,讓當前節點是下乙個節點的前驅節點

pre = node;

// 3.線索化右子樹

threadednodes

(node.

getright()

);}// 遍歷中序線索化二叉樹

public

void

threadedlist()

// 列印當前節點

system.out.

print

(node.

getvalue()

+" ");

// 如果當前節點的右節點指向後繼節點,就一直輸出

while

(node.

getrighttype()

==1)// 替換這個遍歷的節點

node = node.

getright()

;}}// 前序遍歷

public

void

preorder()

else

}public

void

infixorder()

else

}public

void

postorder()

else}}

// 測試類

線索化二叉樹關鍵點

// **片段

// 如果lefttype為0,表示指向左子樹,如果為1表示指向前驅節點

private

int lefttype;

// 如果righttype為0,表示指向右子樹,如果為1表示指向前後繼節點

private

int righttype;

// 每處理乙個節點,讓當前節點是下乙個節點的前驅節點

pre = node;

遞迴過程中,不斷處理前驅節點和後繼節點的指向github:資料結構和演算法源**

資料結構之線索二叉樹

應用案例說明 將下面的二叉樹,進行中序線索二叉樹。中序遍歷的數列為 定義threadedbinarytree 實現了線索化功能的二叉樹 class threadedbinarytree 過載一把threadednodes方法 public void threadednodes 遍歷線索化二叉樹的方法...

資料結構之 線索二叉樹

2 線索二叉樹 實現 對於一顆二叉樹而言 如下圖所示 每次我們想要查詢二叉樹裡面的乙個節點的時候,我們都必須遍歷這棵樹,以中序遍歷為例,遍歷的順序為4251637,當我們遍歷到標號為5這個節點的時候,如果有個指標指向5的前乙個節點2或者後乙個節點1的話,那麼我們跳轉到2或者1的效率肯定會大大的提公升...

資料結構 樹和二叉樹 二叉線索樹

遍歷二叉樹就是以一定的規則將二叉樹中的結點排列成乙個線性序列,從而得到二叉樹結點的各種遍歷序列。其實質就是對乙個非線性結構進行線性化操作,使在這個訪問序列中每乙個結點 除了第乙個和最後乙個 都有乙個直接前驅和直接後繼。在二叉樹的鏈式儲存中,只能體現出父子關係,不能直接得到結點在遍歷中的前驅和後繼。前...