線索二叉樹

2022-07-12 06:24:10 字數 1493 閱讀 7486

線索化二叉樹:利用二叉樹中的節點的空指標域,分別指向它的前繼節點和後繼節點

概念:說明:二叉樹進行線索化後,其左指標域可能是左子樹或者前繼節點,右指標域可能是右子樹或者後繼節點

此章節舉例二叉樹為

前序結果:1,3,8,10,6,14

中序結果:8,3,10,1,14,6

後序結果:8,10,3,14,6,1

二叉樹構造

//構造二叉樹

treenode node1 = new treenode(1);

treenode node3 = new treenode(3);

treenode node6 = new treenode(6);

treenode node8 = new treenode(8);

treenode node10 = new treenode(10);

treenode node14 = new treenode(14);

node1.setleft(node3);

node3.setleft(node8);

node3.setright(node10);

node1.setright(node6);

node6.setleft(node14);

// 設定父節點,用於後續遍歷線索二叉樹

node3.setparent(node1);

node8.setparent(node3);

node10.setparent(node3);

node14.setparent(node6);

node6.setparent(node1);

//節點屬性

class treenode

// 設定前驅節點(因為實在遞迴過程中的[遞]過程進行前繼節點賦值,所以時node指向pre)

if (node.getleft() == null)

// 設定後驅節點(因為是在遞迴過程中的[歸]過程進行後繼節點賦值,所以是用pre指向node)

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

// pre值改變

pre = node;

// 左子樹遞迴

if (node.getlefttype() != 1)

// 右子樹遞迴

if (node.getrighttype() != 1)

}

**

// 後序線索二叉樹遍歷

public void iteratornext()

while (node != null)

else

​pre = node;

node = node.getparent();

} else}}

}}

線索二叉樹

當用二叉鍊錶作為二叉樹的儲存結構時,因為每個結點中只有指向其左 右兒子結點的指標,所以從任一結點出發只能直接找到該結點的左 右兒子。在一般情況下靠它無法直接找到該結點在某種遍歷序下的前驅和後繼結點。如果在每個結點中增加指向其前驅和後繼結點的指標,將降低儲存空間的效率。我們可以證明 在n個結點的二叉鍊...

線索二叉樹

1.線索二叉樹結構和操作定義 threadbintree.h 功能 線索標誌域所有值 typedef enumnodeflag 功能 線索二叉樹結構體 typedef struct threadtreethreadbintree 前驅節點指標 threadbintree previous null ...

線索二叉樹

原始碼 中序線索二叉樹 author 菜鳥 version 2014.7.23 include include include typedef char datatype using namespace std 定義線索二叉樹的結構體 typedef struct nodethreadbitreen...