資料結構和演算法 順序儲存二叉樹 線索化二叉樹

2021-10-04 10:40:21 字數 2103 閱讀 3099

順序二叉樹通常只考慮完全二叉樹

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

第n個元素的右子節點為 2 * n + 2

第n個元素的父節點為 (n-1) / 2

n : 表示二叉樹中的第幾個元素(按0開始編號,如圖所示)

**:

public

class

arrbinarytreedemo

;//建立乙個arrbinarytree

arrbinarytree arrbinarytree =

newarrbinarytree

(arr)

; arrbinarytree.

preorder()

;//1,2,4,5,3,6,7}}

//編寫乙個arrbinarytree,實現順序儲存二叉樹

class

arrbinarytree

public

void

preorder()

/** * 完成順序儲存二叉樹的前序遍歷

* @param index

*/public

void

preorder

(int index)

//輸出當前這個元素

system.out.

println

(arr[index]);

//向左遞迴遍歷if(

(index *2+

1)< arr.length)

//向右遞迴遍歷if(

(index *2+

2)< arr.length)

}}

說明: 當線索化二叉樹後,node節點的 屬性 left 和 right ,有如下情況:

left 指向的是左子樹,也可能是指向的前驅節點. 比如 ① 節點 left 指向的左子樹, 而 ⑩ 節點的 left 指向的就是前驅節點.

right指向的是右子樹,也可能是指向後繼節點,比如 ① 節點right 指向的是右子樹,而⑩ 節點的right 指向的是後繼節點.

**:

public

class

threadedbinarytreedemo

}/**

* 定義線索化二叉樹

*/class

threadedbinarytree

public

void

threadednodes()

//遍歷線索化二叉樹

public

void

threadlist()

system.out.

println

(node)

;while

(node.

getrighttype()

==1) node = node.

getright()

;}}/**

* 二叉樹中進行中序線索化

* @param node 當前需要線索化的節點

*/public

void

threadednodes

(heronode node)

//1.線索化左子樹

threadednodes

(node.

getleft()

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

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

if(node.

getleft()

== null)

//處理後繼節點

if(pre!=null && pre.

getright()

== null)

//!!!每處理乙個節點,當前節點成為前驅結點

pre = node;

//3.線索化右子樹

threadednodes

(node.

getright()

);}}

/** * 建立結點

*/@getter

@setter

class

heronode

@override

public string tostring()

';}}

資料結構 順序儲存二叉樹

include iostream using namespace std define max node size 100 二叉樹的最大節點數 typedef char sqbitree max node size 1 0號單元節點個數 建立二叉樹 void creat tree sqbitree ...

順序儲存二叉樹 線索化二叉樹

二叉樹並不是每乙個指標都能夠都能完全被利用上,葉子節點的兩個指標都沒有被引用,為空。希望充分利用其所有指標,在二叉樹的順序儲存結構中用其剩餘指標分切指向某種遍歷順序下前驅節點和後繼節點 圖示 先線索化左子樹 threadednotes node.getleft 線索化當前節點 先處理當前節點的前驅節...

資料結構和演算法 順序二叉樹

package com.demo.calculate import android.os.bundle import android.view.view import com.demo.calculate.bean.binarytree import com.demo.calculate.bean....